|
3115
|
121
|
16
|
2026-05-07T12:01:28.033338+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155288033_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1252116285576363992
|
6378757184128944228
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3114
|
NULL
|
NULL
|
NULL
|
|
3116
|
122
|
12
|
2026-05-07T12:01:28.033344+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155288033_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1252116285576363992
|
6378757184128944228
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3117
|
121
|
17
|
2026-05-07T12:01:30.920610+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155290920_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1252116285576363992
|
6378757184128944228
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3118
|
122
|
13
|
2026-05-07T12:01:58.945259+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155318945_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9066241},"on_screen":true,"lines":[{"char_start":1681,"char_count":209,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":1890,"char_count":344,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":2234,"char_count":180,"bounds":{"left":0.53025264,"top":0.0,"width":0.46409574,"height":0.014365523}},{"char_start":2414,"char_count":205,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":2619,"char_count":247,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":2866,"char_count":255,"bounds":{"left":0.53025264,"top":0.0015961692,"width":0.46974736,"height":0.014365523}},{"char_start":3121,"char_count":231,"bounds":{"left":0.53025264,"top":0.01915403,"width":0.46974736,"height":0.014365523}},{"char_start":3352,"char_count":254,"bounds":{"left":0.53025264,"top":0.03671189,"width":0.46974736,"height":0.014365523}},{"char_start":3606,"char_count":177,"bounds":{"left":0.53025264,"top":0.054269753,"width":0.45611703,"height":0.014365523}},{"char_start":3783,"char_count":253,"bounds":{"left":0.53025264,"top":0.07182761,"width":0.46974736,"height":0.014365523}},{"char_start":4036,"char_count":253,"bounds":{"left":0.53025264,"top":0.08938547,"width":0.46974736,"height":0.014365523}},{"char_start":4289,"char_count":430,"bounds":{"left":0.53025264,"top":0.10694334,"width":0.46974736,"height":0.014365523}},{"char_start":4719,"char_count":189,"bounds":{"left":0.53025264,"top":0.1245012,"width":0.46974736,"height":0.014365523}}],"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8455838190384092645
|
6378759383219308644
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3119
|
121
|
18
|
2026-05-07T12:02:01.485077+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155321485_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8455838190384092645
|
6378759383219308644
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3117
|
NULL
|
NULL
|
NULL
|
|
3122
|
122
|
15
|
2026-05-07T12:02:08.934413+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155328934_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9066241},"on_screen":true,"lines":[{"char_start":1681,"char_count":209,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":1890,"char_count":344,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":2234,"char_count":180,"bounds":{"left":0.53025264,"top":0.0,"width":0.46409574,"height":0.014365523}},{"char_start":2414,"char_count":205,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":2619,"char_count":247,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":2866,"char_count":255,"bounds":{"left":0.53025264,"top":0.0015961692,"width":0.46974736,"height":0.014365523}},{"char_start":3121,"char_count":231,"bounds":{"left":0.53025264,"top":0.01915403,"width":0.46974736,"height":0.014365523}},{"char_start":3352,"char_count":254,"bounds":{"left":0.53025264,"top":0.03671189,"width":0.46974736,"height":0.014365523}},{"char_start":3606,"char_count":177,"bounds":{"left":0.53025264,"top":0.054269753,"width":0.45611703,"height":0.014365523}},{"char_start":3783,"char_count":253,"bounds":{"left":0.53025264,"top":0.07182761,"width":0.46974736,"height":0.014365523}},{"char_start":4036,"char_count":253,"bounds":{"left":0.53025264,"top":0.08938547,"width":0.46974736,"height":0.014365523}},{"char_start":4289,"char_count":430,"bounds":{"left":0.53025264,"top":0.10694334,"width":0.46974736,"height":0.014365523}},{"char_start":4719,"char_count":191,"bounds":{"left":0.53025264,"top":0.1245012,"width":0.46974736,"height":0.014365523}},{"char_start":4910,"char_count":324,"bounds":{"left":0.53025264,"top":0.14205906,"width":0.46974736,"height":0.014365523}},{"char_start":5234,"char_count":203,"bounds":{"left":0.53025264,"top":0.15961692,"width":0.46974736,"height":0.014365523}},{"char_start":5437,"char_count":376,"bounds":{"left":0.53025264,"top":0.17717478,"width":0.46974736,"height":0.014365523}}],"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1194041805200852709
|
6666989724944173156
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3123
|
121
|
20
|
2026-05-07T12:02:16.170259+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155336170_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7195305522248216022
|
6666989733533976676
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3120
|
NULL
|
NULL
|
NULL
|
|
3124
|
122
|
16
|
2026-05-07T12:02:16.255649+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155336255_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7195305522248216022
|
6666989733533976676
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3122
|
NULL
|
NULL
|
NULL
|
|
3140
|
121
|
29
|
2026-05-07T12:02:50.502790+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155370502_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98d5a4e6-72a7-479b-bb6f-7f853121c0f0\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98d5a4e6-72a7-479b-bb6f-7f853121c0f0\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2197534818339115148
|
6630960925777631332
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3141
|
122
|
24
|
2026-05-07T12:02:50.502809+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155370502_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98d5a4e6-72a7-479b-bb6f-7f853121c0f0\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98d5a4e6-72a7-479b-bb6f-7f853121c0f0\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2197534818339115148
|
6630960925777631332
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3142
|
121
|
30
|
2026-05-07T12:02:57.871+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155377871_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98d5a4e6-72a7-479b-bb6f-7f853121c0f0\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98d5a4e6-72a7-479b-bb6f-7f853121c0f0\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2197534818339115148
|
6630960925777631332
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3143
|
122
|
25
|
2026-05-07T12:02:57.858747+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155377858_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98d5a4e6-72a7-479b-bb6f-7f853121c0f0\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f3c840b-bfad-48a3-94c0-e319fbb65389\",\"trace_id\":\"3a803ce7-c5d7-4100-992b-5d7a6b06b249\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3\",\"trace_id\":\"74e0a9db-48bf-4550-9fc8-e06ec60025dd\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":174.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"77475693-ed3e-4da5-b7e8-fafce6e58aa2\",\"trace_id\":\"e2be8362-841a-4d43-9a19-6d87b4d2e92d\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"513d9706-d7c5-4fd0-8fc2-f1f87aa7e744\",\"trace_id\":\"5332f8ee-f3e7-44c6-8249-77e8cebee67b\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring start {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8f746de8-3b27-4e59-a3fb-a6ef151e088e\",\"trace_id\":\"32558590-b923-4af5-b409-9e7ffb2ae754\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"109eea48-d88d-49be-b1de-dc6529d2b48f\",\"trace_id\":\"074b5e62-0826-47e4-91a2-f984c52fadd7\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"577b7470-e26e-494d-9149-4f67902ed1c7\",\"trace_id\":\"33e03fe6-6827-4e3d-a04e-e03e9303c2d5\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:00:00, 2026-05-07 12:02:00] {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6eabeed-4a2a-4356-8b14-09c7653cb21b\",\"trace_id\":\"cbf1f138-a371-405c-81c0-54c028c88a25\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b61bd7eb-35fd-4330-b55d-216eef0b67b7\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5d63c55-89d9-4c2b-9384-c4b023110457\",\"trace_id\":\"ed575d3a-5cd4-4cd7-acc9-57a2eb31c195\"}\n[2026-05-07 12:02:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98d5a4e6-72a7-479b-bb6f-7f853121c0f0\",\"trace_id\":\"d531cac9-47ef-42fa-8954-fdc94a7106d6\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2197534818339115148
|
6630960925777631332
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0f3c840b-bfad-48a3-94c0-e319fbb65389","trace_id":"3a803ce7-c5d7-4100-992b-5d7a6b06b249"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36d7c7d4-f5ca-4a23-b5ff-4dafef5e60a3","trace_id":"74e0a9db-48bf-4550-9fc8-e06ec60025dd"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:01:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3148
|
121
|
33
|
2026-05-07T12:03:45.809562+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155425809_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":26157,"workerId":"","target":"activities"} {"correlation_id":"e68f798f-4d05-40ac-8f04-b7dbbbc7e020","trace_id":"422ccc24-6ea8-4e30-946f-f0906ebb85af"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring start {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring end {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":26157,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e68f798f-4d05-40ac-8f04-b7dbbbc7e020\",\"trace_id\":\"422ccc24-6ea8-4e30-946f-f0906ebb85af\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring start {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring end {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":26157,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e68f798f-4d05-40ac-8f04-b7dbbbc7e020\",\"trace_id\":\"422ccc24-6ea8-4e30-946f-f0906ebb85af\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring start {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring end {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4480877572510602516
|
6666987525921179748
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":26157,"workerId":"","target":"activities"} {"correlation_id":"e68f798f-4d05-40ac-8f04-b7dbbbc7e020","trace_id":"422ccc24-6ea8-4e30-946f-f0906ebb85af"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring start {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring end {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3146
|
NULL
|
NULL
|
NULL
|
|
3149
|
122
|
28
|
2026-05-07T12:03:45.867715+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155425867_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_selected":false,"is_expanded":false}]...
|
8043719072324535154
|
-8628527368849355612
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
PhostormVIewINavigarecode Project: faVsco.js, menu
PhostormVIewINavigarecodeLaravelKeractorFV faVsco.jsProiectRateLimitException.php© SyncToUserPilot.php(C) RateLimitAwareWrapper.pnp© TranscodeParameterResolveC) AddRateLimitCommand.pnp(C) UserService.ohoT IntegrationApp/.../SyncCrmEntitiesTrait.php© SyncOpportunity.php© Uuid.php> D Traits• MUicocaced> O User> O Utils> C Validation•Uvephp nelpers.onpInitialFrontendState.php© Jiminny.phpc) Plan.ohoc) serializer.ono© TeamScimDetails.php> bootstrar• W build> L conticM contrib• database• M docs.> tront-endD lang› node_modules library root> phpstan•M oublic>O resourcesy Mroutesphp api.phpphp api_v2.phpphp console.phppnp customer_aoi.onppnp embedded.ongpnp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv L storage> Maoo> M debugbarM frameworkv logsaitianore• audio wavcustom.loa= hubsnot-journal-noll.loaTImportBatchJobTrait.phg(©) Middleware/RateLimited.onguHup/RateLimited.phg)BaserateLimiter.php© Service.php( Hubspot/.../SyncCrmEntitiesTrait.phpc Opportunitysynclest.onoclass Cllent extends Baseclient 1mpLements Hubspotclientintertace %.= laravel.log< nhounit ymlus tht isououc tunction oetpacnnatedbatabeneratord:Generator ...}* athrows DealAniExcention* athrows CrmExcentionpublic function get0pportunityById(string $crmId, array $fields): array$deal = $this->executeRequest(fn () => $this->getNewInstance->crm(->deals->basicApi(->getById($deal = $this->getNewInstance->crm->deals(->basicApi->getById(scrnldimplode( separator:'', $fields));} catch (DealApiException Se) {Sthis->loq->info('[Hubspot] Failed to fetch opportunity'. ["crm_1d => Scrmld'reason' => $e->qetMessageOthrow se:if (1 Sdeal instanceof DealWithAssociations) {throw new Crmexcentionm'Deal not found')1id' => Sdeal->aettdoiInronenties' => Sdeal->aetPronentiesol.associations: => Sdeal->aetAssociations0l/*** Gonenie batch noad method fon HubSnot objortel* Apanam string SobjectType The object type ('deals', 'companies', 'contacts')* anaram array<string> ScrmIds Array of HubSpot object IDs (max 100)* anaram arrau<string> $fields Array of property names to fetch* Greturn arrau<strina, arrau> Arrau keued bu CRM ID with obiect dataQube Server // Learn more // Don't ask again (today 10:25)100% C4Thu 7 May 15:03:45= custom.log4 SF jjiminny@localhost]4 HS local fiiminnv@localhostiA console [PROD]& console fEul2026-05-07 12:03:07 local.INF0: Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":26157, "workerId":"", "target":"activities"} {"correlation_id":"e68f798f-4d0[2026-05-07 12:03:10] local.INF0:[SocialAccountService] Fetching token {"socialAccountId":1499, "provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb"[2026-05-07 12:03:10] local.INF0:[SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb'[2026-05-07 12:03:10] local.INF0:LencryptedlokenManagerJ benerating access token. 1"mode": "Legacy", 1"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb" "trace_id" :"59b60[2026-05-07 12:03:101 local.INF0: [CrmOwnenResolverl Integnation owner matched as CRM Owner {"crm providen":"hubspot" "crm ownen":148, "team id":2} {"connelation id":"0df0e81342 468 ~2 ^ Y [2026-05-07 12:03:12] Local.INF0: Jiminny\Console\Commands\Command: :run Memory usage before starting command {"command" : "meeting-bot: schedule-bot", "memoryBeforeCommandInMb" :62[2026-05-07 12:03:12] local.INF0:[ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id"."3b7b8bb2-5f23-4a05-8ec9-5213b705afb2" "trace_id":"0011fd88-51[2026-05-07 12:03:12] local.INF0:Jiminny\ Console Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot" "memoryBeforeCommandinMb":62.0. "memoryaf12026-05-0812H058151LOCALTNEOR IEnnyA VonsoLe vommands commancHarun Memony usage berore stanting command "commanouaoauensimon ton-actv tes"r"memoryser ore vommano nib"[2026-05-07 12:03:13] local.INF0: Jiminny Console Commands Command::run Memory usage for command {"command"."dialers:monitor-activities" "memoryBeforeCommandinmb":62.0."memory2026-05-07 12:03:15 Local.NOTICE: Monitorina start{"correlation_id": "531cf4d9-0422-40a1-8c65-a4dce203efea", "trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}[2026-05-07 12:03:15] Local.NOTICE: Monitoring end {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea", "trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}2026-05-07 12:05:16 Local.INF0rN aima nnvaionso leicommanosavcommanoRanunMemony usade herone sitartino command ucommano Maumarl boxaskao- lnsiisanerneshirumemony serone vommano mИБя[2026-05-07 12:03:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command" : "mailbox: skip-lists:refresh", "memoryBeforeCommandInMb" : 62.0, "memory12026-05 0/1280811:1oca LONEOR Eminnv Tonso le Vommands Vcommandaacun Memony usade hefore stantsino command E Mcommand"aimart lhoxahat chaococessu"memorvBetocedommand MMБ"Я69N0[2026-05-07 12:03:18] Local.INFO:[EmailSchedule] STARTING batch process2026-05-07 12:03:18 Local.IN=0:Emait Schedmle uawisHeD batch mocess thostur rockerlamo Wtncocessed aolWconcellatiionWaG0E59hec-2810-4660-6686-674580c661Wtmace[2026-05-07 12:03:18] Local.INF0: Jiminny\Console\Commands\Command::run Memory usage for command {"command" : "mailbox:batch: process" , "memoryBeforeCommandInMb" : 62.0, "memoryAfter• [2026-05-07 12:03:22] Local.INF0: Jiminny\Console\Commands\Command::run Memory usage for command {"command" : "mailbox:batch: retry-failed", "memoryBeforeCommandInMb" : 62.0, "memoryWШ 1 1..1...
|
3147
|
NULL
|
NULL
|
NULL
|
|
3150
|
121
|
34
|
2026-05-07T12:03:47.281863+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155427281_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":26157,"workerId":"","target":"activities"} {"correlation_id":"e68f798f-4d05-40ac-8f04-b7dbbbc7e020","trace_id":"422ccc24-6ea8-4e30-946f-f0906ebb85af"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring start {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring end {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":26157,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e68f798f-4d05-40ac-8f04-b7dbbbc7e020\",\"trace_id\":\"422ccc24-6ea8-4e30-946f-f0906ebb85af\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring start {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring end {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":26157,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e68f798f-4d05-40ac-8f04-b7dbbbc7e020\",\"trace_id\":\"422ccc24-6ea8-4e30-946f-f0906ebb85af\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring start {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring end {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4480877572510602516
|
6666987525921179748
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":26157,"workerId":"","target":"activities"} {"correlation_id":"e68f798f-4d05-40ac-8f04-b7dbbbc7e020","trace_id":"422ccc24-6ea8-4e30-946f-f0906ebb85af"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring start {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring end {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3185
|
124
|
9
|
2026-05-07T12:05:37.720048+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155537720_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":26157,"workerId":"","target":"activities"} {"correlation_id":"e68f798f-4d05-40ac-8f04-b7dbbbc7e020","trace_id":"422ccc24-6ea8-4e30-946f-f0906ebb85af"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring start {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring end {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
[2026-05-07 12:04:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"46345330-889e-48d9-9bab-f1a09f196131","trace_id":"74a39714-7a99-4658-9b53-06f58358c874"}
[2026-05-07 12:04:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"46345330-889e-48d9-9bab-f1a09f196131","trace_id":"74a39714-7a99-4658-9b53-06f58358c874"}
[2026-05-07 12:04:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"46345330-889e-48d9-9bab-f1a09f196131","trace_id":"74a39714-7a99-4658-9b53-06f58358c874"}
[2026-05-07 12:04:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0b9341b2-c615-4b91-8499-dabd330e4cc2","trace_id":"45c7af0d-bdfe-48d2-ac41-068d668b19ea"}
[2026-05-07 12:04:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0b9341b2-c615-4b91-8499-dabd330e4cc2","trace_id":"45c7af0d-bdfe-48d2-ac41-068d668b19ea"}
[2026-05-07 12:04:08] local.NOTICE: Monitoring start {"correlation_id":"e37e77f6-d59f-419e-b047-41f6ebafb0c1","trace_id":"c978fc86-25da-42a1-8a5f-59c83bf738f4"}
[2026-05-07 12:04:08] local.NOTICE: Monitoring end {"correlation_id":"e37e77f6-d59f-419e-b047-41f6ebafb0c1","trace_id":"c978fc86-25da-42a1-8a5f-59c83bf738f4"}
[2026-05-07 12:04:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c827fd94-547e-476c-a1cc-c89d293a8e2e","trace_id":"c9d68c76-6cff-409d-8b8c-ab7fd108f4d7"}
[2026-05-07 12:04:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c827fd94-547e-476c-a1cc-c89d293a8e2e","trace_id":"c9d68c76-6cff-409d-8b8c-ab7fd108f4d7"}
[2026-05-07 12:04:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"26cc808f-0dad-4cc2-a329-888a123d6bc8","trace_id":"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5"}
[2026-05-07 12:04:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"26cc808f-0dad-4cc2-a329-888a123d6bc8","trace_id":"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5"}
[2026-05-07 12:04:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"26cc808f-0dad-4cc2-a329-888a123d6bc8","trace_id":"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5"}
[2026-05-07 12:04:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"26cc808f-0dad-4cc2-a329-888a123d6bc8","trace_id":"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5"}
[2026-05-07 12:04:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"68bcee7a-27ed-418a-824a-561fd2b38b8f","trace_id":"259819c2-7296-4c04-9c1c-66a0c25481c3"}
[2026-05-07 12:04:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:02:00, 2026-05-07 12:04:00] {"correlation_id":"68bcee7a-27ed-418a-824a-561fd2b38b8f","trace_id":"259819c2-7296-4c04-9c1c-66a0c25481c3"}
[2026-05-07 12:04:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:02:00, 2026-05-07 12:04:00] {"correlation_id":"68bcee7a-27ed-418a-824a-561fd2b38b8f","trace_id":"259819c2-7296-4c04-9c1c-66a0c25481c3"}
[2026-05-07 12:04:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"68bcee7a-27ed-418a-824a-561fd2b38b8f","trace_id":"259819c2-7296-4c04-9c1c-66a0c25481c3"}
[2026-05-07 12:05:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8c69347c-1810-488f-a610-77d0fdfc765a","trace_id":"c13b57fc-b919-4189-be12-a3a3b37b8b3f"}
[2026-05-07 12:05:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8c69347c-1810-488f-a610-77d0fdfc765a","trace_id":"c13b57fc-b919-4189-be12-a3a3b37b8b3f"}
[2026-05-07 12:05:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8c69347c-1810-488f-a610-77d0fdfc765a","trace_id":"c13b57fc-b919-4189-be12-a3a3b37b8b3f"}
[2026-05-07 12:05:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d9a40e6c-830d-46c7-a1e6-61dcbe5108b8","trace_id":"6fbe7708-1920-4590-8b39-530624ba5ccb"}
[2026-05-07 12:05:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d9a40e6c-830d-46c7-a1e6-61dcbe5108b8","trace_id":"6fbe7708-1920-4590-8b39-530624ba5ccb"}
[2026-05-07 12:05:14] local.NOTICE: Monitoring start {"correlation_id":"03da249c-dc1b-44ee-914b-87191fcd3ad7","trace_id":"ea6f55af-dbe0-48f0-a6d4-109356313258"}
[2026-05-07 12:05:14] local.NOTICE: Monitoring end {"correlation_id":"03da249c-dc1b-44ee-914b-87191fcd3ad7","trace_id":"ea6f55af-dbe0-48f0-a6d4-109356313258"}
[2026-05-07 12:05:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"50692ce6-c010-4bee-a960-bd4e05d275c0","trace_id":"3243a003-7abf-4385-8d63-b9b062eedda5"}
[2026-05-07 12:05:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"50692ce6-c010-4bee-a960-bd4e05d275c0","trace_id":"3243a003-7abf-4385-8d63-b9b062eedda5"}
[2026-05-07 12:05:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b5dcac00-0c43-479d-ae4e-2bdba60b3186","trace_id":"f2e402bd-cdb2-49c3-ae5d-50946e974e48"}
[2026-05-07 12:05:19] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b5dcac00-0c43-479d-ae4e-2bdba60b3186","trace_id":"f2e402bd-cdb2-49c3-ae5d-50946e974e48"}
[2026-05-07 12:05:19] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b5dcac00-0c43-479d-ae4e-2bdba60b3186","trace_id":"f2e402bd-cdb2-49c3-ae5d-50946e974e48"}
[2026-05-07 12:05:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b5dcac00-0c43-479d-ae4e-2bdba60b3186","trace_id":"f2e402bd-cdb2-49c3-ae5d-50946e974e48"}
[2026-05-07 12:05:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1a7c26c3-5ea8-40bf-a270-d1fa2adb0fe1","trace_id":"b235668b-b93d-497c-9d18-d51b90f5cfd1"}
[2026-05-07 12:05:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1a7c26c3-5ea8-40bf-a270-d1fa2adb0fe1","trace_id":"b235668b-b93d-497c-9d18-d51b90f5cfd1"}
[2026-05-07 12:05:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bcf94421-86bd-49a6-957b-b7ac1675d258","trace_id":"382fa307-4352-4751-8eaa-805fcb9c302e"}
[2026-05-07 12:05:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bcf94421-86bd-49a6-957b-b7ac1675d258","trace_id":"382fa307-4352-4751-8eaa-805fcb9c302e"}
[2026-05-07 12:05:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c755776f-7cea-43b6-8f21-8ca75db0f6f1","trace_id":"ee4fd995-5012-4db2-a6eb-f65f0116cb9e"}
[2026-05-07 12:05:28] local.INFO: Running pre-meeting notification command {"correlation_id":"c755776f-7cea-43b6-8f21-8ca75db0f6f1","trace_id":"ee4fd995-5012-4db2-a6eb-f65f0116cb9e"}
[2026-05-07 12:05:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c755776f-7cea-43b6-8f21-8ca75db0f6f1","trace_id":"ee4fd995-5012-4db2-a6eb-f65f0116cb9e"}
[2026-05-07 12:05:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"726c983f-5739-4710-8193-5f1940de6ad8","trace_id":"33ffeb25-fc65-4f68-8596-f830655d246b"}
[2026-05-07 12:05:30] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:55:00, 2026-05-07 12:00:00] {"correlation_id":"726c983f-5739-4710-8193-5f1940de6ad8","trace_id":"33ffeb25-fc65-4f68-8596-f830655d246b"}
[2026-05-07 12:05:30] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:55:00, 2026-05-07 12:00:00] {"correlation_id":"726c983f-5739-4710-8193-5f1940de6ad8","trace_id":"33ffeb25-fc65-4f68-8596-f830655d246b"}
[2026-05-07 12:05:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"726c983f-5739-4710-8193-5f1940de6ad8","trace_id":"33ffeb25-fc65-4f68-8596-f830655d246b"}
[2026-05-07 12:05:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5d24fea1-32ac-4634-95a5-48eec6367aa9","trace_id":"b20a0d89-7566-44be-bdd0-e0f79a8e034b"}
[2026-05-07 12:05:32] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:00","to":"12:05"} {"correlation_id":"5d24fea1-32ac-4634-95a5-48eec6367aa9","trace_id":"b20a0d89-7566-44be-bdd0-e0f79a8e034b"}
[2026-05-07 12:05:32] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:55","to":"02:00"} {"correlation_id":"5d24fea1-32ac-4634-95a5-48eec6367aa9","trace_id":"b20a0d89-7566-44be-bdd0-e0f79a8e034b"}
[2026-05-07 12:05:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5d24fea1-32ac-4634-95a5-48eec6367aa9","trace_id":"b20a0d89-7566-44be-bdd0-e0f79a8e034b"}
[2026-05-07 12:05:35] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:35] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":26157,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e68f798f-4d05-40ac-8f04-b7dbbbc7e020\",\"trace_id\":\"422ccc24-6ea8-4e30-946f-f0906ebb85af\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring start {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring end {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}\n[2026-05-07 12:04:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"46345330-889e-48d9-9bab-f1a09f196131\",\"trace_id\":\"74a39714-7a99-4658-9b53-06f58358c874\"}\n[2026-05-07 12:04:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"46345330-889e-48d9-9bab-f1a09f196131\",\"trace_id\":\"74a39714-7a99-4658-9b53-06f58358c874\"}\n[2026-05-07 12:04:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"46345330-889e-48d9-9bab-f1a09f196131\",\"trace_id\":\"74a39714-7a99-4658-9b53-06f58358c874\"}\n[2026-05-07 12:04:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0b9341b2-c615-4b91-8499-dabd330e4cc2\",\"trace_id\":\"45c7af0d-bdfe-48d2-ac41-068d668b19ea\"}\n[2026-05-07 12:04:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0b9341b2-c615-4b91-8499-dabd330e4cc2\",\"trace_id\":\"45c7af0d-bdfe-48d2-ac41-068d668b19ea\"}\n[2026-05-07 12:04:08] local.NOTICE: Monitoring start {\"correlation_id\":\"e37e77f6-d59f-419e-b047-41f6ebafb0c1\",\"trace_id\":\"c978fc86-25da-42a1-8a5f-59c83bf738f4\"}\n[2026-05-07 12:04:08] local.NOTICE: Monitoring end {\"correlation_id\":\"e37e77f6-d59f-419e-b047-41f6ebafb0c1\",\"trace_id\":\"c978fc86-25da-42a1-8a5f-59c83bf738f4\"}\n[2026-05-07 12:04:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c827fd94-547e-476c-a1cc-c89d293a8e2e\",\"trace_id\":\"c9d68c76-6cff-409d-8b8c-ab7fd108f4d7\"}\n[2026-05-07 12:04:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c827fd94-547e-476c-a1cc-c89d293a8e2e\",\"trace_id\":\"c9d68c76-6cff-409d-8b8c-ab7fd108f4d7\"}\n[2026-05-07 12:04:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"26cc808f-0dad-4cc2-a329-888a123d6bc8\",\"trace_id\":\"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5\"}\n[2026-05-07 12:04:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"26cc808f-0dad-4cc2-a329-888a123d6bc8\",\"trace_id\":\"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5\"}\n[2026-05-07 12:04:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"26cc808f-0dad-4cc2-a329-888a123d6bc8\",\"trace_id\":\"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5\"}\n[2026-05-07 12:04:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"26cc808f-0dad-4cc2-a329-888a123d6bc8\",\"trace_id\":\"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5\"}\n[2026-05-07 12:04:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"68bcee7a-27ed-418a-824a-561fd2b38b8f\",\"trace_id\":\"259819c2-7296-4c04-9c1c-66a0c25481c3\"}\n[2026-05-07 12:04:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:02:00, 2026-05-07 12:04:00] {\"correlation_id\":\"68bcee7a-27ed-418a-824a-561fd2b38b8f\",\"trace_id\":\"259819c2-7296-4c04-9c1c-66a0c25481c3\"}\n[2026-05-07 12:04:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:02:00, 2026-05-07 12:04:00] {\"correlation_id\":\"68bcee7a-27ed-418a-824a-561fd2b38b8f\",\"trace_id\":\"259819c2-7296-4c04-9c1c-66a0c25481c3\"}\n[2026-05-07 12:04:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"68bcee7a-27ed-418a-824a-561fd2b38b8f\",\"trace_id\":\"259819c2-7296-4c04-9c1c-66a0c25481c3\"}\n[2026-05-07 12:05:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8c69347c-1810-488f-a610-77d0fdfc765a\",\"trace_id\":\"c13b57fc-b919-4189-be12-a3a3b37b8b3f\"}\n[2026-05-07 12:05:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8c69347c-1810-488f-a610-77d0fdfc765a\",\"trace_id\":\"c13b57fc-b919-4189-be12-a3a3b37b8b3f\"}\n[2026-05-07 12:05:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8c69347c-1810-488f-a610-77d0fdfc765a\",\"trace_id\":\"c13b57fc-b919-4189-be12-a3a3b37b8b3f\"}\n[2026-05-07 12:05:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d9a40e6c-830d-46c7-a1e6-61dcbe5108b8\",\"trace_id\":\"6fbe7708-1920-4590-8b39-530624ba5ccb\"}\n[2026-05-07 12:05:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d9a40e6c-830d-46c7-a1e6-61dcbe5108b8\",\"trace_id\":\"6fbe7708-1920-4590-8b39-530624ba5ccb\"}\n[2026-05-07 12:05:14] local.NOTICE: Monitoring start {\"correlation_id\":\"03da249c-dc1b-44ee-914b-87191fcd3ad7\",\"trace_id\":\"ea6f55af-dbe0-48f0-a6d4-109356313258\"}\n[2026-05-07 12:05:14] local.NOTICE: Monitoring end {\"correlation_id\":\"03da249c-dc1b-44ee-914b-87191fcd3ad7\",\"trace_id\":\"ea6f55af-dbe0-48f0-a6d4-109356313258\"}\n[2026-05-07 12:05:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"50692ce6-c010-4bee-a960-bd4e05d275c0\",\"trace_id\":\"3243a003-7abf-4385-8d63-b9b062eedda5\"}\n[2026-05-07 12:05:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"50692ce6-c010-4bee-a960-bd4e05d275c0\",\"trace_id\":\"3243a003-7abf-4385-8d63-b9b062eedda5\"}\n[2026-05-07 12:05:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5dcac00-0c43-479d-ae4e-2bdba60b3186\",\"trace_id\":\"f2e402bd-cdb2-49c3-ae5d-50946e974e48\"}\n[2026-05-07 12:05:19] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b5dcac00-0c43-479d-ae4e-2bdba60b3186\",\"trace_id\":\"f2e402bd-cdb2-49c3-ae5d-50946e974e48\"}\n[2026-05-07 12:05:19] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b5dcac00-0c43-479d-ae4e-2bdba60b3186\",\"trace_id\":\"f2e402bd-cdb2-49c3-ae5d-50946e974e48\"}\n[2026-05-07 12:05:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5dcac00-0c43-479d-ae4e-2bdba60b3186\",\"trace_id\":\"f2e402bd-cdb2-49c3-ae5d-50946e974e48\"}\n[2026-05-07 12:05:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1a7c26c3-5ea8-40bf-a270-d1fa2adb0fe1\",\"trace_id\":\"b235668b-b93d-497c-9d18-d51b90f5cfd1\"}\n[2026-05-07 12:05:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1a7c26c3-5ea8-40bf-a270-d1fa2adb0fe1\",\"trace_id\":\"b235668b-b93d-497c-9d18-d51b90f5cfd1\"}\n[2026-05-07 12:05:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bcf94421-86bd-49a6-957b-b7ac1675d258\",\"trace_id\":\"382fa307-4352-4751-8eaa-805fcb9c302e\"}\n[2026-05-07 12:05:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bcf94421-86bd-49a6-957b-b7ac1675d258\",\"trace_id\":\"382fa307-4352-4751-8eaa-805fcb9c302e\"}\n[2026-05-07 12:05:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c755776f-7cea-43b6-8f21-8ca75db0f6f1\",\"trace_id\":\"ee4fd995-5012-4db2-a6eb-f65f0116cb9e\"}\n[2026-05-07 12:05:28] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c755776f-7cea-43b6-8f21-8ca75db0f6f1\",\"trace_id\":\"ee4fd995-5012-4db2-a6eb-f65f0116cb9e\"}\n[2026-05-07 12:05:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c755776f-7cea-43b6-8f21-8ca75db0f6f1\",\"trace_id\":\"ee4fd995-5012-4db2-a6eb-f65f0116cb9e\"}\n[2026-05-07 12:05:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"726c983f-5739-4710-8193-5f1940de6ad8\",\"trace_id\":\"33ffeb25-fc65-4f68-8596-f830655d246b\"}\n[2026-05-07 12:05:30] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:55:00, 2026-05-07 12:00:00] {\"correlation_id\":\"726c983f-5739-4710-8193-5f1940de6ad8\",\"trace_id\":\"33ffeb25-fc65-4f68-8596-f830655d246b\"}\n[2026-05-07 12:05:30] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:55:00, 2026-05-07 12:00:00] {\"correlation_id\":\"726c983f-5739-4710-8193-5f1940de6ad8\",\"trace_id\":\"33ffeb25-fc65-4f68-8596-f830655d246b\"}\n[2026-05-07 12:05:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"726c983f-5739-4710-8193-5f1940de6ad8\",\"trace_id\":\"33ffeb25-fc65-4f68-8596-f830655d246b\"}\n[2026-05-07 12:05:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d24fea1-32ac-4634-95a5-48eec6367aa9\",\"trace_id\":\"b20a0d89-7566-44be-bdd0-e0f79a8e034b\"}\n[2026-05-07 12:05:32] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:00\",\"to\":\"12:05\"} {\"correlation_id\":\"5d24fea1-32ac-4634-95a5-48eec6367aa9\",\"trace_id\":\"b20a0d89-7566-44be-bdd0-e0f79a8e034b\"}\n[2026-05-07 12:05:32] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:55\",\"to\":\"02:00\"} {\"correlation_id\":\"5d24fea1-32ac-4634-95a5-48eec6367aa9\",\"trace_id\":\"b20a0d89-7566-44be-bdd0-e0f79a8e034b\"}\n[2026-05-07 12:05:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d24fea1-32ac-4634-95a5-48eec6367aa9\",\"trace_id\":\"b20a0d89-7566-44be-bdd0-e0f79a8e034b\"}\n[2026-05-07 12:05:35] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:35] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":26157,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e68f798f-4d05-40ac-8f04-b7dbbbc7e020\",\"trace_id\":\"422ccc24-6ea8-4e30-946f-f0906ebb85af\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0df0e813-5910-4f27-a46f-a733edcaf9fb\",\"trace_id\":\"59b607ca-83b6-49c3-ad98-bf052cab9a7a\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2\",\"trace_id\":\"0011fd88-5fd6-4856-b35a-e5238a32d1a0\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36be6521-0402-4d31-a1cd-c304a95eff7d\",\"trace_id\":\"b871a282-02ab-4aab-8265-430d0f43a920\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring start {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:15] local.NOTICE: Monitoring end {\"correlation_id\":\"531cf4d9-0422-40a1-8c65-a4dce203efea\",\"trace_id\":\"508b8f65-22ab-486c-858f-aab8320d2a3d\"}\n[2026-05-07 12:03:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f7081c66-d8a5-4c39-bcf0-f30f9449e23e\",\"trace_id\":\"91a88794-abb0-42e9-bd8f-19a7a0d41879\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3\",\"trace_id\":\"e943109d-e6dd-4b1a-8504-912a6ceec20f\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}\n[2026-05-07 12:03:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54679d4b-cf57-4e5d-9ed5-88982b34ae34\",\"trace_id\":\"7e095086-9fc6-4f20-8f02-9bcdabca5db1\"}\n[2026-05-07 12:04:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"46345330-889e-48d9-9bab-f1a09f196131\",\"trace_id\":\"74a39714-7a99-4658-9b53-06f58358c874\"}\n[2026-05-07 12:04:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"46345330-889e-48d9-9bab-f1a09f196131\",\"trace_id\":\"74a39714-7a99-4658-9b53-06f58358c874\"}\n[2026-05-07 12:04:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"46345330-889e-48d9-9bab-f1a09f196131\",\"trace_id\":\"74a39714-7a99-4658-9b53-06f58358c874\"}\n[2026-05-07 12:04:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0b9341b2-c615-4b91-8499-dabd330e4cc2\",\"trace_id\":\"45c7af0d-bdfe-48d2-ac41-068d668b19ea\"}\n[2026-05-07 12:04:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0b9341b2-c615-4b91-8499-dabd330e4cc2\",\"trace_id\":\"45c7af0d-bdfe-48d2-ac41-068d668b19ea\"}\n[2026-05-07 12:04:08] local.NOTICE: Monitoring start {\"correlation_id\":\"e37e77f6-d59f-419e-b047-41f6ebafb0c1\",\"trace_id\":\"c978fc86-25da-42a1-8a5f-59c83bf738f4\"}\n[2026-05-07 12:04:08] local.NOTICE: Monitoring end {\"correlation_id\":\"e37e77f6-d59f-419e-b047-41f6ebafb0c1\",\"trace_id\":\"c978fc86-25da-42a1-8a5f-59c83bf738f4\"}\n[2026-05-07 12:04:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c827fd94-547e-476c-a1cc-c89d293a8e2e\",\"trace_id\":\"c9d68c76-6cff-409d-8b8c-ab7fd108f4d7\"}\n[2026-05-07 12:04:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c827fd94-547e-476c-a1cc-c89d293a8e2e\",\"trace_id\":\"c9d68c76-6cff-409d-8b8c-ab7fd108f4d7\"}\n[2026-05-07 12:04:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"26cc808f-0dad-4cc2-a329-888a123d6bc8\",\"trace_id\":\"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5\"}\n[2026-05-07 12:04:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"26cc808f-0dad-4cc2-a329-888a123d6bc8\",\"trace_id\":\"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5\"}\n[2026-05-07 12:04:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"26cc808f-0dad-4cc2-a329-888a123d6bc8\",\"trace_id\":\"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5\"}\n[2026-05-07 12:04:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"26cc808f-0dad-4cc2-a329-888a123d6bc8\",\"trace_id\":\"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5\"}\n[2026-05-07 12:04:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"68bcee7a-27ed-418a-824a-561fd2b38b8f\",\"trace_id\":\"259819c2-7296-4c04-9c1c-66a0c25481c3\"}\n[2026-05-07 12:04:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:02:00, 2026-05-07 12:04:00] {\"correlation_id\":\"68bcee7a-27ed-418a-824a-561fd2b38b8f\",\"trace_id\":\"259819c2-7296-4c04-9c1c-66a0c25481c3\"}\n[2026-05-07 12:04:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:02:00, 2026-05-07 12:04:00] {\"correlation_id\":\"68bcee7a-27ed-418a-824a-561fd2b38b8f\",\"trace_id\":\"259819c2-7296-4c04-9c1c-66a0c25481c3\"}\n[2026-05-07 12:04:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"68bcee7a-27ed-418a-824a-561fd2b38b8f\",\"trace_id\":\"259819c2-7296-4c04-9c1c-66a0c25481c3\"}\n[2026-05-07 12:05:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8c69347c-1810-488f-a610-77d0fdfc765a\",\"trace_id\":\"c13b57fc-b919-4189-be12-a3a3b37b8b3f\"}\n[2026-05-07 12:05:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8c69347c-1810-488f-a610-77d0fdfc765a\",\"trace_id\":\"c13b57fc-b919-4189-be12-a3a3b37b8b3f\"}\n[2026-05-07 12:05:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8c69347c-1810-488f-a610-77d0fdfc765a\",\"trace_id\":\"c13b57fc-b919-4189-be12-a3a3b37b8b3f\"}\n[2026-05-07 12:05:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d9a40e6c-830d-46c7-a1e6-61dcbe5108b8\",\"trace_id\":\"6fbe7708-1920-4590-8b39-530624ba5ccb\"}\n[2026-05-07 12:05:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d9a40e6c-830d-46c7-a1e6-61dcbe5108b8\",\"trace_id\":\"6fbe7708-1920-4590-8b39-530624ba5ccb\"}\n[2026-05-07 12:05:14] local.NOTICE: Monitoring start {\"correlation_id\":\"03da249c-dc1b-44ee-914b-87191fcd3ad7\",\"trace_id\":\"ea6f55af-dbe0-48f0-a6d4-109356313258\"}\n[2026-05-07 12:05:14] local.NOTICE: Monitoring end {\"correlation_id\":\"03da249c-dc1b-44ee-914b-87191fcd3ad7\",\"trace_id\":\"ea6f55af-dbe0-48f0-a6d4-109356313258\"}\n[2026-05-07 12:05:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"50692ce6-c010-4bee-a960-bd4e05d275c0\",\"trace_id\":\"3243a003-7abf-4385-8d63-b9b062eedda5\"}\n[2026-05-07 12:05:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"50692ce6-c010-4bee-a960-bd4e05d275c0\",\"trace_id\":\"3243a003-7abf-4385-8d63-b9b062eedda5\"}\n[2026-05-07 12:05:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b5dcac00-0c43-479d-ae4e-2bdba60b3186\",\"trace_id\":\"f2e402bd-cdb2-49c3-ae5d-50946e974e48\"}\n[2026-05-07 12:05:19] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b5dcac00-0c43-479d-ae4e-2bdba60b3186\",\"trace_id\":\"f2e402bd-cdb2-49c3-ae5d-50946e974e48\"}\n[2026-05-07 12:05:19] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b5dcac00-0c43-479d-ae4e-2bdba60b3186\",\"trace_id\":\"f2e402bd-cdb2-49c3-ae5d-50946e974e48\"}\n[2026-05-07 12:05:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b5dcac00-0c43-479d-ae4e-2bdba60b3186\",\"trace_id\":\"f2e402bd-cdb2-49c3-ae5d-50946e974e48\"}\n[2026-05-07 12:05:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1a7c26c3-5ea8-40bf-a270-d1fa2adb0fe1\",\"trace_id\":\"b235668b-b93d-497c-9d18-d51b90f5cfd1\"}\n[2026-05-07 12:05:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1a7c26c3-5ea8-40bf-a270-d1fa2adb0fe1\",\"trace_id\":\"b235668b-b93d-497c-9d18-d51b90f5cfd1\"}\n[2026-05-07 12:05:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bcf94421-86bd-49a6-957b-b7ac1675d258\",\"trace_id\":\"382fa307-4352-4751-8eaa-805fcb9c302e\"}\n[2026-05-07 12:05:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bcf94421-86bd-49a6-957b-b7ac1675d258\",\"trace_id\":\"382fa307-4352-4751-8eaa-805fcb9c302e\"}\n[2026-05-07 12:05:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c755776f-7cea-43b6-8f21-8ca75db0f6f1\",\"trace_id\":\"ee4fd995-5012-4db2-a6eb-f65f0116cb9e\"}\n[2026-05-07 12:05:28] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c755776f-7cea-43b6-8f21-8ca75db0f6f1\",\"trace_id\":\"ee4fd995-5012-4db2-a6eb-f65f0116cb9e\"}\n[2026-05-07 12:05:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c755776f-7cea-43b6-8f21-8ca75db0f6f1\",\"trace_id\":\"ee4fd995-5012-4db2-a6eb-f65f0116cb9e\"}\n[2026-05-07 12:05:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"726c983f-5739-4710-8193-5f1940de6ad8\",\"trace_id\":\"33ffeb25-fc65-4f68-8596-f830655d246b\"}\n[2026-05-07 12:05:30] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:55:00, 2026-05-07 12:00:00] {\"correlation_id\":\"726c983f-5739-4710-8193-5f1940de6ad8\",\"trace_id\":\"33ffeb25-fc65-4f68-8596-f830655d246b\"}\n[2026-05-07 12:05:30] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:55:00, 2026-05-07 12:00:00] {\"correlation_id\":\"726c983f-5739-4710-8193-5f1940de6ad8\",\"trace_id\":\"33ffeb25-fc65-4f68-8596-f830655d246b\"}\n[2026-05-07 12:05:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"726c983f-5739-4710-8193-5f1940de6ad8\",\"trace_id\":\"33ffeb25-fc65-4f68-8596-f830655d246b\"}\n[2026-05-07 12:05:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d24fea1-32ac-4634-95a5-48eec6367aa9\",\"trace_id\":\"b20a0d89-7566-44be-bdd0-e0f79a8e034b\"}\n[2026-05-07 12:05:32] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:00\",\"to\":\"12:05\"} {\"correlation_id\":\"5d24fea1-32ac-4634-95a5-48eec6367aa9\",\"trace_id\":\"b20a0d89-7566-44be-bdd0-e0f79a8e034b\"}\n[2026-05-07 12:05:32] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:55\",\"to\":\"02:00\"} {\"correlation_id\":\"5d24fea1-32ac-4634-95a5-48eec6367aa9\",\"trace_id\":\"b20a0d89-7566-44be-bdd0-e0f79a8e034b\"}\n[2026-05-07 12:05:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d24fea1-32ac-4634-95a5-48eec6367aa9\",\"trace_id\":\"b20a0d89-7566-44be-bdd0-e0f79a8e034b\"}\n[2026-05-07 12:05:35] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:35] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}\n[2026-05-07 12:05:36] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"545546a7-d5fb-4922-9c92-110fce3014c1\",\"trace_id\":\"b087bc16-5f4e-4e38-8334-30e4b50b918a\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5409940064530339254
|
6648843382901184749
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:03:07] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":26157,"workerId":"","target":"activities"} {"correlation_id":"e68f798f-4d05-40ac-8f04-b7dbbbc7e020","trace_id":"422ccc24-6ea8-4e30-946f-f0906ebb85af"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"0df0e813-5910-4f27-a46f-a733edcaf9fb","trace_id":"59b607ca-83b6-49c3-ad98-bf052cab9a7a"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3b7b8bb2-5f23-4a05-8ec9-5213b705afb2","trace_id":"0011fd88-5fd6-4856-b35a-e5238a32d1a0"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"36be6521-0402-4d31-a1cd-c304a95eff7d","trace_id":"b871a282-02ab-4aab-8265-430d0f43a920"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring start {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:15] local.NOTICE: Monitoring end {"correlation_id":"531cf4d9-0422-40a1-8c65-a4dce203efea","trace_id":"508b8f65-22ab-486c-858f-aab8320d2a3d"}
[2026-05-07 12:03:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f7081c66-d8a5-4c39-bcf0-f30f9449e23e","trace_id":"91a88794-abb0-42e9-bd8f-19a7a0d41879"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d0f59bcc-281c-4f6d-bf8b-bf458c3c1bb3","trace_id":"e943109d-e6dd-4b1a-8504-912a6ceec20f"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
[2026-05-07 12:03:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"54679d4b-cf57-4e5d-9ed5-88982b34ae34","trace_id":"7e095086-9fc6-4f20-8f02-9bcdabca5db1"}
[2026-05-07 12:04:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"46345330-889e-48d9-9bab-f1a09f196131","trace_id":"74a39714-7a99-4658-9b53-06f58358c874"}
[2026-05-07 12:04:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"46345330-889e-48d9-9bab-f1a09f196131","trace_id":"74a39714-7a99-4658-9b53-06f58358c874"}
[2026-05-07 12:04:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"46345330-889e-48d9-9bab-f1a09f196131","trace_id":"74a39714-7a99-4658-9b53-06f58358c874"}
[2026-05-07 12:04:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0b9341b2-c615-4b91-8499-dabd330e4cc2","trace_id":"45c7af0d-bdfe-48d2-ac41-068d668b19ea"}
[2026-05-07 12:04:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0b9341b2-c615-4b91-8499-dabd330e4cc2","trace_id":"45c7af0d-bdfe-48d2-ac41-068d668b19ea"}
[2026-05-07 12:04:08] local.NOTICE: Monitoring start {"correlation_id":"e37e77f6-d59f-419e-b047-41f6ebafb0c1","trace_id":"c978fc86-25da-42a1-8a5f-59c83bf738f4"}
[2026-05-07 12:04:08] local.NOTICE: Monitoring end {"correlation_id":"e37e77f6-d59f-419e-b047-41f6ebafb0c1","trace_id":"c978fc86-25da-42a1-8a5f-59c83bf738f4"}
[2026-05-07 12:04:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c827fd94-547e-476c-a1cc-c89d293a8e2e","trace_id":"c9d68c76-6cff-409d-8b8c-ab7fd108f4d7"}
[2026-05-07 12:04:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c827fd94-547e-476c-a1cc-c89d293a8e2e","trace_id":"c9d68c76-6cff-409d-8b8c-ab7fd108f4d7"}
[2026-05-07 12:04:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"26cc808f-0dad-4cc2-a329-888a123d6bc8","trace_id":"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5"}
[2026-05-07 12:04:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"26cc808f-0dad-4cc2-a329-888a123d6bc8","trace_id":"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5"}
[2026-05-07 12:04:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"26cc808f-0dad-4cc2-a329-888a123d6bc8","trace_id":"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5"}
[2026-05-07 12:04:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"26cc808f-0dad-4cc2-a329-888a123d6bc8","trace_id":"f2b26d26-210b-4d9c-bfa1-a141dd6a8db5"}
[2026-05-07 12:04:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"68bcee7a-27ed-418a-824a-561fd2b38b8f","trace_id":"259819c2-7296-4c04-9c1c-66a0c25481c3"}
[2026-05-07 12:04:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:02:00, 2026-05-07 12:04:00] {"correlation_id":"68bcee7a-27ed-418a-824a-561fd2b38b8f","trace_id":"259819c2-7296-4c04-9c1c-66a0c25481c3"}
[2026-05-07 12:04:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:02:00, 2026-05-07 12:04:00] {"correlation_id":"68bcee7a-27ed-418a-824a-561fd2b38b8f","trace_id":"259819c2-7296-4c04-9c1c-66a0c25481c3"}
[2026-05-07 12:04:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"68bcee7a-27ed-418a-824a-561fd2b38b8f","trace_id":"259819c2-7296-4c04-9c1c-66a0c25481c3"}
[2026-05-07 12:05:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8c69347c-1810-488f-a610-77d0fdfc765a","trace_id":"c13b57fc-b919-4189-be12-a3a3b37b8b3f"}
[2026-05-07 12:05:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8c69347c-1810-488f-a610-77d0fdfc765a","trace_id":"c13b57fc-b919-4189-be12-a3a3b37b8b3f"}
[2026-05-07 12:05:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8c69347c-1810-488f-a610-77d0fdfc765a","trace_id":"c13b57fc-b919-4189-be12-a3a3b37b8b3f"}
[2026-05-07 12:05:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d9a40e6c-830d-46c7-a1e6-61dcbe5108b8","trace_id":"6fbe7708-1920-4590-8b39-530624ba5ccb"}
[2026-05-07 12:05:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d9a40e6c-830d-46c7-a1e6-61dcbe5108b8","trace_id":"6fbe7708-1920-4590-8b39-530624ba5ccb"}
[2026-05-07 12:05:14] local.NOTICE: Monitoring start {"correlation_id":"03da249c-dc1b-44ee-914b-87191fcd3ad7","trace_id":"ea6f55af-dbe0-48f0-a6d4-109356313258"}
[2026-05-07 12:05:14] local.NOTICE: Monitoring end {"correlation_id":"03da249c-dc1b-44ee-914b-87191fcd3ad7","trace_id":"ea6f55af-dbe0-48f0-a6d4-109356313258"}
[2026-05-07 12:05:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"50692ce6-c010-4bee-a960-bd4e05d275c0","trace_id":"3243a003-7abf-4385-8d63-b9b062eedda5"}
[2026-05-07 12:05:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"50692ce6-c010-4bee-a960-bd4e05d275c0","trace_id":"3243a003-7abf-4385-8d63-b9b062eedda5"}
[2026-05-07 12:05:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b5dcac00-0c43-479d-ae4e-2bdba60b3186","trace_id":"f2e402bd-cdb2-49c3-ae5d-50946e974e48"}
[2026-05-07 12:05:19] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b5dcac00-0c43-479d-ae4e-2bdba60b3186","trace_id":"f2e402bd-cdb2-49c3-ae5d-50946e974e48"}
[2026-05-07 12:05:19] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b5dcac00-0c43-479d-ae4e-2bdba60b3186","trace_id":"f2e402bd-cdb2-49c3-ae5d-50946e974e48"}
[2026-05-07 12:05:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b5dcac00-0c43-479d-ae4e-2bdba60b3186","trace_id":"f2e402bd-cdb2-49c3-ae5d-50946e974e48"}
[2026-05-07 12:05:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1a7c26c3-5ea8-40bf-a270-d1fa2adb0fe1","trace_id":"b235668b-b93d-497c-9d18-d51b90f5cfd1"}
[2026-05-07 12:05:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1a7c26c3-5ea8-40bf-a270-d1fa2adb0fe1","trace_id":"b235668b-b93d-497c-9d18-d51b90f5cfd1"}
[2026-05-07 12:05:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bcf94421-86bd-49a6-957b-b7ac1675d258","trace_id":"382fa307-4352-4751-8eaa-805fcb9c302e"}
[2026-05-07 12:05:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bcf94421-86bd-49a6-957b-b7ac1675d258","trace_id":"382fa307-4352-4751-8eaa-805fcb9c302e"}
[2026-05-07 12:05:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c755776f-7cea-43b6-8f21-8ca75db0f6f1","trace_id":"ee4fd995-5012-4db2-a6eb-f65f0116cb9e"}
[2026-05-07 12:05:28] local.INFO: Running pre-meeting notification command {"correlation_id":"c755776f-7cea-43b6-8f21-8ca75db0f6f1","trace_id":"ee4fd995-5012-4db2-a6eb-f65f0116cb9e"}
[2026-05-07 12:05:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c755776f-7cea-43b6-8f21-8ca75db0f6f1","trace_id":"ee4fd995-5012-4db2-a6eb-f65f0116cb9e"}
[2026-05-07 12:05:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"726c983f-5739-4710-8193-5f1940de6ad8","trace_id":"33ffeb25-fc65-4f68-8596-f830655d246b"}
[2026-05-07 12:05:30] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:55:00, 2026-05-07 12:00:00] {"correlation_id":"726c983f-5739-4710-8193-5f1940de6ad8","trace_id":"33ffeb25-fc65-4f68-8596-f830655d246b"}
[2026-05-07 12:05:30] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:55:00, 2026-05-07 12:00:00] {"correlation_id":"726c983f-5739-4710-8193-5f1940de6ad8","trace_id":"33ffeb25-fc65-4f68-8596-f830655d246b"}
[2026-05-07 12:05:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"726c983f-5739-4710-8193-5f1940de6ad8","trace_id":"33ffeb25-fc65-4f68-8596-f830655d246b"}
[2026-05-07 12:05:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5d24fea1-32ac-4634-95a5-48eec6367aa9","trace_id":"b20a0d89-7566-44be-bdd0-e0f79a8e034b"}
[2026-05-07 12:05:32] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:00","to":"12:05"} {"correlation_id":"5d24fea1-32ac-4634-95a5-48eec6367aa9","trace_id":"b20a0d89-7566-44be-bdd0-e0f79a8e034b"}
[2026-05-07 12:05:32] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:55","to":"02:00"} {"correlation_id":"5d24fea1-32ac-4634-95a5-48eec6367aa9","trace_id":"b20a0d89-7566-44be-bdd0-e0f79a8e034b"}
[2026-05-07 12:05:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5d24fea1-32ac-4634-95a5-48eec6367aa9","trace_id":"b20a0d89-7566-44be-bdd0-e0f79a8e034b"}
[2026-05-07 12:05:35] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:35] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
[2026-05-07 12:05:36] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"545546a7-d5fb-4922-9c92-110fce3014c1","trace_id":"b087bc16-5f4e-4e38-8334-30e4b50b918a"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3586
|
132
|
24
|
2026-05-07T12:28:02.751465+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156882751_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.33439744},"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3583624884219591166
|
6378757184196315236
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3585
|
NULL
|
NULL
|
NULL
|
|
3587
|
131
|
25
|
2026-05-07T12:28:02.751465+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156882751_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":4,"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3583624884219591166
|
6378757184196315236
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3600
|
132
|
31
|
2026-05-07T12:28:45.803547+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156925803_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID:...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2882073869209989498
|
8566796879427176607
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID:...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3602
|
132
|
32
|
2026-05-07T12:28:56.977685+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156936977_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.68484044,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.69348407,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"bounds":{"left":0.7044548,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"bounds":{"left":0.7130984,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"bounds":{"left":0.72174203,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"bounds":{"left":0.73038566,"top":0.07821229,"width":0.032247342,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"bounds":{"left":0.76263297,"top":0.07821229,"width":0.023271276,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"bounds":{"left":0.7859042,"top":0.07821229,"width":0.022938829,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"bounds":{"left":0.8088431,"top":0.08220271,"width":0.0019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1996073461129327348
|
8566805675520198815
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
3600
|
NULL
|
NULL
|
NULL
|
|
3603
|
131
|
33
|
2026-05-07T12:28:57.143084+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156937143_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7673782238848625796
|
-8646559087753982588
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
master, menu
iTerm2ShellE Project: faVsco.js, menu
master, menu
iTerm2ShellEditViewSessionScriptsProfilesWindowHelplih)• Lukas/Stefka 121 • in 2h 2 mLA100%8Thu 7 May 15:28:56•DEV (docker)181DOCKERO ₴1DEV (docker)H82worker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny: debugSyncing opportunity 0Syncing opportunity 25Syncing opportunity 50Syncing opportunity 75Syncingopportunity 100root@docker_lamp_1:/home/jiminny# php artisan jiminny:debugSyncing opportunity 0Syncing opportunity 25Syncing opportunity 50Syncing opportunity 75Syncing opportunity 100root@docker_lamp_1:/home/jiminny# php artisan jiminny:debugSyncing opportunity 0APP (-zsh)-zsh|• 84screenpipe** *5-zsh₴6DEVHubSpot\Client\Crm\Deals\ApiException[429] Client error: *GET [URL_WITH_CREDENTIALS] ]...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3604
|
131
|
34
|
2026-05-07T12:28:59.277274+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156939277_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1996073461129327348
|
8566805675520198815
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
3603
|
NULL
|
NULL
|
NULL
|
|
3605
|
131
|
35
|
2026-05-07T12:29:34.366111+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156974366_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring start {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring end {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring start {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring end {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1996073461129327348
|
8566805675520198815
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3606
|
132
|
33
|
2026-05-07T12:29:36.627998+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156976627_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.68484044,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.69348407,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"bounds":{"left":0.7044548,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"bounds":{"left":0.7130984,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"bounds":{"left":0.72174203,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"bounds":{"left":0.73038566,"top":0.07821229,"width":0.032247342,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"bounds":{"left":0.76263297,"top":0.07821229,"width":0.023271276,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"bounds":{"left":0.7859042,"top":0.07821229,"width":0.022938829,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"bounds":{"left":0.8088431,"top":0.08220271,"width":0.0019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring start {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring end {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}","depth":4,"bounds":{"left":0.52859044,"top":0.016759777,"width":0.47140956,"height":0.98324025},"on_screen":true,"value":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring start {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring end {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1996073461129327348
|
8566805675520198815
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3622
|
134
|
2
|
2026-05-07T12:31:29.105809+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778157089105_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.68484044,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.69348407,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"bounds":{"left":0.7044548,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"bounds":{"left":0.7130984,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"bounds":{"left":0.72174203,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"bounds":{"left":0.73038566,"top":0.07821229,"width":0.032247342,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"bounds":{"left":0.76263297,"top":0.07821229,"width":0.023271276,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"bounds":{"left":0.7859042,"top":0.07821229,"width":0.022938829,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"bounds":{"left":0.8088431,"top":0.08220271,"width":0.0019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring start {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring end {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:30:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3aa037e0-524c-4f99-a2fe-9537e1034e93\",\"trace_id\":\"c8f2c739-13e2-490c-9bce-6b940c4073cc\"}\n[2026-05-07 12:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3aa037e0-524c-4f99-a2fe-9537e1034e93\",\"trace_id\":\"c8f2c739-13e2-490c-9bce-6b940c4073cc\"}\n[2026-05-07 12:30:12] local.NOTICE: Monitoring start {\"correlation_id\":\"33c6a1f2-608d-47f9-a340-97a81d930e48\",\"trace_id\":\"e07fb9c3-cf43-4caa-bb94-08be684e8e00\"}\n[2026-05-07 12:30:12] local.NOTICE: Monitoring end {\"correlation_id\":\"33c6a1f2-608d-47f9-a340-97a81d930e48\",\"trace_id\":\"e07fb9c3-cf43-4caa-bb94-08be684e8e00\"}\n[2026-05-07 12:30:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8da3e1c6-c806-4120-a0d8-8d99e640c4d3\",\"trace_id\":\"4813fc1e-67c7-495d-bafe-1c0bddb52670\"}\n[2026-05-07 12:30:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8da3e1c6-c806-4120-a0d8-8d99e640c4d3\",\"trace_id\":\"4813fc1e-67c7-495d-bafe-1c0bddb52670\"}\n[2026-05-07 12:30:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:28:00, 2026-05-07 12:30:00] {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:28:00, 2026-05-07 12:30:00] {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36d2678a-b734-46bd-990e-9968b2fb86d5\",\"trace_id\":\"0f9e0c4b-3fbb-400e-97a8-5b59b1c18d50\"}\n[2026-05-07 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36d2678a-b734-46bd-990e-9968b2fb86d5\",\"trace_id\":\"0f9e0c4b-3fbb-400e-97a8-5b59b1c18d50\"}\n[2026-05-07 12:30:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3559116e-0397-44eb-a839-e397bbd4c3f4\",\"trace_id\":\"e765565d-25d2-45ab-b9a4-42ef784a60fc\"}\n[2026-05-07 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3559116e-0397-44eb-a839-e397bbd4c3f4\",\"trace_id\":\"e765565d-25d2-45ab-b9a4-42ef784a60fc\"}\n[2026-05-07 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:27] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:20:00, 2026-05-07 12:25:00] {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:20:00, 2026-05-07 12:25:00] {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:32] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3fce27e4-1b07-40fc-8a53-fbad08b093e2\",\"trace_id\":\"3b8bc557-6e3e-42bf-853b-b7b38c986086\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b772eb2-f1f8-46d1-afe2-8c7e5bc14182\",\"trace_id\":\"a1b68813-a4cf-4767-8a9f-dde19264b31d\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3fce27e4-1b07-40fc-8a53-fbad08b093e2\",\"trace_id\":\"3b8bc557-6e3e-42bf-853b-b7b38c986086\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:32:37.470385Z\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b772eb2-f1f8-46d1-afe2-8c7e5bc14182\",\"trace_id\":\"a1b68813-a4cf-4767-8a9f-dde19264b31d\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"101dc452-3092-4c93-b585-b80bc8b44698\",\"trace_id\":\"b65e71f7-dad2-4432-9357-c7f05e39ae8f\"}\n[2026-05-07 12:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"101dc452-3092-4c93-b585-b80bc8b44698\",\"trace_id\":\"b65e71f7-dad2-4432-9357-c7f05e39ae8f\"}\n[2026-05-07 12:30:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812319,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812320,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812321,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812322,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812323,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812324,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.ALERT: [SyncActivity] Failed {\"import_id\":812319,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.ALERT: [SyncActivity] Failed {\"import_id\":812320,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.ALERT: [SyncActivity] Failed {\"import_id\":812321,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.ALERT: [SyncActivity] Failed {\"import_id\":812322,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6c34890d-27f6-452c-918a-d61dfb22dc78\",\"trace_id\":\"2c6a1876-1e2d-4c90-a235-129bfc1fda30\"}\n[2026-05-07 12:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6c34890d-27f6-452c-918a-d61dfb22dc78\",\"trace_id\":\"2c6a1876-1e2d-4c90-a235-129bfc1fda30\"}\n[2026-05-07 12:30:44] local.ALERT: [SyncActivity] Failed {\"import_id\":812323,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SyncActivity] Start {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:14:00\",\"to\":\"2026-05-07 12:30:00\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:45] local.INFO: [SyncActivity] End {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:45] local.INFO: [SyncActivity] Memory usage {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":28981120,\"memory_real_usage\":67108864,\"pid\":26154} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a3e015c8-7c91-4457-bff4-de94482186fc\",\"trace_id\":\"2966aada-d948-4fec-8388-30f39c48648f\"}\n[2026-05-07 12:30:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a3e015c8-7c91-4457-bff4-de94482186fc\",\"trace_id\":\"2966aada-d948-4fec-8388-30f39c48648f\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c40e82b8-a5fd-4588-a637-9bd875fc31d9\",\"trace_id\":\"038436d0-e786-4dc4-98f2-f235d5e96a8d\"}\n[2026-05-07 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c40e82b8-a5fd-4588-a637-9bd875fc31d9\",\"trace_id\":\"038436d0-e786-4dc4-98f2-f235d5e96a8d\"}\n[2026-05-07 12:30:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8970c115-8149-440f-9afd-94a6f7890ed9\",\"trace_id\":\"fef587d7-b0e8-48f0-85b9-b224f5bdbecc\"}\n[2026-05-07 12:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8970c115-8149-440f-9afd-94a6f7890ed9\",\"trace_id\":\"fef587d7-b0e8-48f0-85b9-b224f5bdbecc\"}\n[2026-05-07 12:31:08] local.NOTICE: Monitoring start {\"correlation_id\":\"8d299958-4bdf-4f50-a904-b3f63d3b6edf\",\"trace_id\":\"8ac0c53d-8ecc-4e29-a465-ff8af18b3565\"}\n[2026-05-07 12:31:08] local.NOTICE: Monitoring end {\"correlation_id\":\"8d299958-4bdf-4f50-a904-b3f63d3b6edf\",\"trace_id\":\"8ac0c53d-8ecc-4e29-a465-ff8af18b3565\"}\n[2026-05-07 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d384715e-b7f3-4ebd-be32-f9c6c9683c6a\",\"trace_id\":\"7221d562-a73d-4a09-8f67-a096ad834b43\"}\n[2026-05-07 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d384715e-b7f3-4ebd-be32-f9c6c9683c6a\",\"trace_id\":\"7221d562-a73d-4a09-8f67-a096ad834b43\"}\n[2026-05-07 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"daa2a14e-13d8-4e03-ade8-5cf235aff8af\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"daa2a14e-13d8-4e03-ade8-5cf235aff8af\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25525984,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.42,\"usage\":25519152,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25558232,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":495.28} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":516.14,\"usage\":25681432,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25659360,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":21.43,\"usage\":25505056,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25543424,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.8,\"usage\":25498888,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}","depth":4,"bounds":{"left":0.52859044,"top":0.016759777,"width":0.47140956,"height":0.98324025},"on_screen":true,"value":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring start {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring end {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:30:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3aa037e0-524c-4f99-a2fe-9537e1034e93\",\"trace_id\":\"c8f2c739-13e2-490c-9bce-6b940c4073cc\"}\n[2026-05-07 12:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3aa037e0-524c-4f99-a2fe-9537e1034e93\",\"trace_id\":\"c8f2c739-13e2-490c-9bce-6b940c4073cc\"}\n[2026-05-07 12:30:12] local.NOTICE: Monitoring start {\"correlation_id\":\"33c6a1f2-608d-47f9-a340-97a81d930e48\",\"trace_id\":\"e07fb9c3-cf43-4caa-bb94-08be684e8e00\"}\n[2026-05-07 12:30:12] local.NOTICE: Monitoring end {\"correlation_id\":\"33c6a1f2-608d-47f9-a340-97a81d930e48\",\"trace_id\":\"e07fb9c3-cf43-4caa-bb94-08be684e8e00\"}\n[2026-05-07 12:30:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8da3e1c6-c806-4120-a0d8-8d99e640c4d3\",\"trace_id\":\"4813fc1e-67c7-495d-bafe-1c0bddb52670\"}\n[2026-05-07 12:30:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8da3e1c6-c806-4120-a0d8-8d99e640c4d3\",\"trace_id\":\"4813fc1e-67c7-495d-bafe-1c0bddb52670\"}\n[2026-05-07 12:30:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:28:00, 2026-05-07 12:30:00] {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:28:00, 2026-05-07 12:30:00] {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36d2678a-b734-46bd-990e-9968b2fb86d5\",\"trace_id\":\"0f9e0c4b-3fbb-400e-97a8-5b59b1c18d50\"}\n[2026-05-07 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36d2678a-b734-46bd-990e-9968b2fb86d5\",\"trace_id\":\"0f9e0c4b-3fbb-400e-97a8-5b59b1c18d50\"}\n[2026-05-07 12:30:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3559116e-0397-44eb-a839-e397bbd4c3f4\",\"trace_id\":\"e765565d-25d2-45ab-b9a4-42ef784a60fc\"}\n[2026-05-07 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3559116e-0397-44eb-a839-e397bbd4c3f4\",\"trace_id\":\"e765565d-25d2-45ab-b9a4-42ef784a60fc\"}\n[2026-05-07 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:27] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:20:00, 2026-05-07 12:25:00] {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:20:00, 2026-05-07 12:25:00] {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:32] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3fce27e4-1b07-40fc-8a53-fbad08b093e2\",\"trace_id\":\"3b8bc557-6e3e-42bf-853b-b7b38c986086\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b772eb2-f1f8-46d1-afe2-8c7e5bc14182\",\"trace_id\":\"a1b68813-a4cf-4767-8a9f-dde19264b31d\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3fce27e4-1b07-40fc-8a53-fbad08b093e2\",\"trace_id\":\"3b8bc557-6e3e-42bf-853b-b7b38c986086\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:32:37.470385Z\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b772eb2-f1f8-46d1-afe2-8c7e5bc14182\",\"trace_id\":\"a1b68813-a4cf-4767-8a9f-dde19264b31d\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"101dc452-3092-4c93-b585-b80bc8b44698\",\"trace_id\":\"b65e71f7-dad2-4432-9357-c7f05e39ae8f\"}\n[2026-05-07 12:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"101dc452-3092-4c93-b585-b80bc8b44698\",\"trace_id\":\"b65e71f7-dad2-4432-9357-c7f05e39ae8f\"}\n[2026-05-07 12:30:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812319,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812320,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812321,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812322,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812323,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812324,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.ALERT: [SyncActivity] Failed {\"import_id\":812319,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.ALERT: [SyncActivity] Failed {\"import_id\":812320,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.ALERT: [SyncActivity] Failed {\"import_id\":812321,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.ALERT: [SyncActivity] Failed {\"import_id\":812322,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6c34890d-27f6-452c-918a-d61dfb22dc78\",\"trace_id\":\"2c6a1876-1e2d-4c90-a235-129bfc1fda30\"}\n[2026-05-07 12:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6c34890d-27f6-452c-918a-d61dfb22dc78\",\"trace_id\":\"2c6a1876-1e2d-4c90-a235-129bfc1fda30\"}\n[2026-05-07 12:30:44] local.ALERT: [SyncActivity] Failed {\"import_id\":812323,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SyncActivity] Start {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:14:00\",\"to\":\"2026-05-07 12:30:00\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:45] local.INFO: [SyncActivity] End {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:45] local.INFO: [SyncActivity] Memory usage {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":28981120,\"memory_real_usage\":67108864,\"pid\":26154} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a3e015c8-7c91-4457-bff4-de94482186fc\",\"trace_id\":\"2966aada-d948-4fec-8388-30f39c48648f\"}\n[2026-05-07 12:30:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a3e015c8-7c91-4457-bff4-de94482186fc\",\"trace_id\":\"2966aada-d948-4fec-8388-30f39c48648f\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c40e82b8-a5fd-4588-a637-9bd875fc31d9\",\"trace_id\":\"038436d0-e786-4dc4-98f2-f235d5e96a8d\"}\n[2026-05-07 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c40e82b8-a5fd-4588-a637-9bd875fc31d9\",\"trace_id\":\"038436d0-e786-4dc4-98f2-f235d5e96a8d\"}\n[2026-05-07 12:30:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8970c115-8149-440f-9afd-94a6f7890ed9\",\"trace_id\":\"fef587d7-b0e8-48f0-85b9-b224f5bdbecc\"}\n[2026-05-07 12:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8970c115-8149-440f-9afd-94a6f7890ed9\",\"trace_id\":\"fef587d7-b0e8-48f0-85b9-b224f5bdbecc\"}\n[2026-05-07 12:31:08] local.NOTICE: Monitoring start {\"correlation_id\":\"8d299958-4bdf-4f50-a904-b3f63d3b6edf\",\"trace_id\":\"8ac0c53d-8ecc-4e29-a465-ff8af18b3565\"}\n[2026-05-07 12:31:08] local.NOTICE: Monitoring end {\"correlation_id\":\"8d299958-4bdf-4f50-a904-b3f63d3b6edf\",\"trace_id\":\"8ac0c53d-8ecc-4e29-a465-ff8af18b3565\"}\n[2026-05-07 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d384715e-b7f3-4ebd-be32-f9c6c9683c6a\",\"trace_id\":\"7221d562-a73d-4a09-8f67-a096ad834b43\"}\n[2026-05-07 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d384715e-b7f3-4ebd-be32-f9c6c9683c6a\",\"trace_id\":\"7221d562-a73d-4a09-8f67-a096ad834b43\"}\n[2026-05-07 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"daa2a14e-13d8-4e03-ade8-5cf235aff8af\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"daa2a14e-13d8-4e03-ade8-5cf235aff8af\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25525984,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.42,\"usage\":25519152,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25558232,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":495.28} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":516.14,\"usage\":25681432,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25659360,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":21.43,\"usage\":25505056,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25543424,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.8,\"usage\":25498888,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false}]...
|
1996073461129327348
|
8566805675520198815
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3623
|
133
|
2
|
2026-05-07T12:31:29.179090+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778157089179_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring start {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring end {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:30:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3aa037e0-524c-4f99-a2fe-9537e1034e93\",\"trace_id\":\"c8f2c739-13e2-490c-9bce-6b940c4073cc\"}\n[2026-05-07 12:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3aa037e0-524c-4f99-a2fe-9537e1034e93\",\"trace_id\":\"c8f2c739-13e2-490c-9bce-6b940c4073cc\"}\n[2026-05-07 12:30:12] local.NOTICE: Monitoring start {\"correlation_id\":\"33c6a1f2-608d-47f9-a340-97a81d930e48\",\"trace_id\":\"e07fb9c3-cf43-4caa-bb94-08be684e8e00\"}\n[2026-05-07 12:30:12] local.NOTICE: Monitoring end {\"correlation_id\":\"33c6a1f2-608d-47f9-a340-97a81d930e48\",\"trace_id\":\"e07fb9c3-cf43-4caa-bb94-08be684e8e00\"}\n[2026-05-07 12:30:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8da3e1c6-c806-4120-a0d8-8d99e640c4d3\",\"trace_id\":\"4813fc1e-67c7-495d-bafe-1c0bddb52670\"}\n[2026-05-07 12:30:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8da3e1c6-c806-4120-a0d8-8d99e640c4d3\",\"trace_id\":\"4813fc1e-67c7-495d-bafe-1c0bddb52670\"}\n[2026-05-07 12:30:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:28:00, 2026-05-07 12:30:00] {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:28:00, 2026-05-07 12:30:00] {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36d2678a-b734-46bd-990e-9968b2fb86d5\",\"trace_id\":\"0f9e0c4b-3fbb-400e-97a8-5b59b1c18d50\"}\n[2026-05-07 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36d2678a-b734-46bd-990e-9968b2fb86d5\",\"trace_id\":\"0f9e0c4b-3fbb-400e-97a8-5b59b1c18d50\"}\n[2026-05-07 12:30:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3559116e-0397-44eb-a839-e397bbd4c3f4\",\"trace_id\":\"e765565d-25d2-45ab-b9a4-42ef784a60fc\"}\n[2026-05-07 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3559116e-0397-44eb-a839-e397bbd4c3f4\",\"trace_id\":\"e765565d-25d2-45ab-b9a4-42ef784a60fc\"}\n[2026-05-07 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:27] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:20:00, 2026-05-07 12:25:00] {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:20:00, 2026-05-07 12:25:00] {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:32] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3fce27e4-1b07-40fc-8a53-fbad08b093e2\",\"trace_id\":\"3b8bc557-6e3e-42bf-853b-b7b38c986086\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b772eb2-f1f8-46d1-afe2-8c7e5bc14182\",\"trace_id\":\"a1b68813-a4cf-4767-8a9f-dde19264b31d\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3fce27e4-1b07-40fc-8a53-fbad08b093e2\",\"trace_id\":\"3b8bc557-6e3e-42bf-853b-b7b38c986086\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:32:37.470385Z\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b772eb2-f1f8-46d1-afe2-8c7e5bc14182\",\"trace_id\":\"a1b68813-a4cf-4767-8a9f-dde19264b31d\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"101dc452-3092-4c93-b585-b80bc8b44698\",\"trace_id\":\"b65e71f7-dad2-4432-9357-c7f05e39ae8f\"}\n[2026-05-07 12:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"101dc452-3092-4c93-b585-b80bc8b44698\",\"trace_id\":\"b65e71f7-dad2-4432-9357-c7f05e39ae8f\"}\n[2026-05-07 12:30:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812319,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812320,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812321,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812322,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812323,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812324,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.ALERT: [SyncActivity] Failed {\"import_id\":812319,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.ALERT: [SyncActivity] Failed {\"import_id\":812320,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.ALERT: [SyncActivity] Failed {\"import_id\":812321,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.ALERT: [SyncActivity] Failed {\"import_id\":812322,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6c34890d-27f6-452c-918a-d61dfb22dc78\",\"trace_id\":\"2c6a1876-1e2d-4c90-a235-129bfc1fda30\"}\n[2026-05-07 12:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6c34890d-27f6-452c-918a-d61dfb22dc78\",\"trace_id\":\"2c6a1876-1e2d-4c90-a235-129bfc1fda30\"}\n[2026-05-07 12:30:44] local.ALERT: [SyncActivity] Failed {\"import_id\":812323,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SyncActivity] Start {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:14:00\",\"to\":\"2026-05-07 12:30:00\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:45] local.INFO: [SyncActivity] End {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:45] local.INFO: [SyncActivity] Memory usage {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":28981120,\"memory_real_usage\":67108864,\"pid\":26154} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a3e015c8-7c91-4457-bff4-de94482186fc\",\"trace_id\":\"2966aada-d948-4fec-8388-30f39c48648f\"}\n[2026-05-07 12:30:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a3e015c8-7c91-4457-bff4-de94482186fc\",\"trace_id\":\"2966aada-d948-4fec-8388-30f39c48648f\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c40e82b8-a5fd-4588-a637-9bd875fc31d9\",\"trace_id\":\"038436d0-e786-4dc4-98f2-f235d5e96a8d\"}\n[2026-05-07 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c40e82b8-a5fd-4588-a637-9bd875fc31d9\",\"trace_id\":\"038436d0-e786-4dc4-98f2-f235d5e96a8d\"}\n[2026-05-07 12:30:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8970c115-8149-440f-9afd-94a6f7890ed9\",\"trace_id\":\"fef587d7-b0e8-48f0-85b9-b224f5bdbecc\"}\n[2026-05-07 12:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8970c115-8149-440f-9afd-94a6f7890ed9\",\"trace_id\":\"fef587d7-b0e8-48f0-85b9-b224f5bdbecc\"}\n[2026-05-07 12:31:08] local.NOTICE: Monitoring start {\"correlation_id\":\"8d299958-4bdf-4f50-a904-b3f63d3b6edf\",\"trace_id\":\"8ac0c53d-8ecc-4e29-a465-ff8af18b3565\"}\n[2026-05-07 12:31:08] local.NOTICE: Monitoring end {\"correlation_id\":\"8d299958-4bdf-4f50-a904-b3f63d3b6edf\",\"trace_id\":\"8ac0c53d-8ecc-4e29-a465-ff8af18b3565\"}\n[2026-05-07 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d384715e-b7f3-4ebd-be32-f9c6c9683c6a\",\"trace_id\":\"7221d562-a73d-4a09-8f67-a096ad834b43\"}\n[2026-05-07 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d384715e-b7f3-4ebd-be32-f9c6c9683c6a\",\"trace_id\":\"7221d562-a73d-4a09-8f67-a096ad834b43\"}\n[2026-05-07 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"daa2a14e-13d8-4e03-ade8-5cf235aff8af\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"daa2a14e-13d8-4e03-ade8-5cf235aff8af\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25525984,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.42,\"usage\":25519152,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25558232,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":495.28} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":516.14,\"usage\":25681432,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25659360,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":21.43,\"usage\":25505056,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25543424,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.8,\"usage\":25498888,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4ce87a9-6ca5-4efe-99b3-4220893270d0\",\"trace_id\":\"724e8238-2ed5-4089-9509-9c7c12a3c373\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"172d1ae8-b8cc-4804-bed9-e32d074e265c\",\"trace_id\":\"4817cdef-8d3e-4914-8bee-feffb18efe1b\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring start {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.NOTICE: Monitoring end {\"correlation_id\":\"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5\",\"trace_id\":\"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {\"crm_id\":\"374720564\",\"reason\":\"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)\n {\"exception\":\"[object] (HubSpot\\\\Client\\\\Crm\\\\Deals\\\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your ten_secondly_rolling limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\" (truncated...)\n at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\\\Client\\\\Crm\\\\Deals\\\\Api\\\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getOpportunityById('374720564', Array)\n#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunity('374720564')\n#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#19 {main}\n\"} {\"correlation_id\":\"273355f2-6315-4b20-bc9a-c26c681d6344\",\"trace_id\":\"5ea79a26-c838-48e8-9913-93ad508146a6\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d\",\"trace_id\":\"1ea62b83-9639-41e3-a523-26404c39fa80\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d191d5c6-133f-43e1-8ed4-d285d0c768b8\",\"trace_id\":\"67798138-bdb7-4bd7-8b32-377663219a88\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a4e5e18f-9f8c-4196-ace0-bf664d4827d9\",\"trace_id\":\"d75cb10b-4c76-4c00-84d4-26efeb738e17\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3789f06a-4f0c-4b12-be80-d6a36e089d1b\",\"trace_id\":\"6ce89147-1624-456d-9e75-f4948f2c5db8\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:33Z\\\",\\\"trace_id\\\":\\\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\\\",\\\"correlation_id\\\":\\\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:34Z\\\",\\\"trace_id\\\":\\\"2a3e5b60-5770-46f2-aca6-7b0527363000\\\",\\\"correlation_id\\\":\\\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:35Z\\\",\\\"trace_id\\\":\\\"2e34e335-a76d-40e5-bc50-3861392e4c00\\\",\\\"correlation_id\\\":\\\"9db5b389-6165-4feb-8e6e-bedc369e1c87\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3015918c-9edf-487d-b1d0-97c9d00ea6b1\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:36Z\\\",\\\"trace_id\\\":\\\"6eba7173-b781-4e55-b1fb-1087ed023000\\\",\\\"correlation_id\\\":\\\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b18cbf88-c6d0-4caa-9af9-d2dabb673500 Correlation ID: ead4f7c0-3077-42bb-84d0-c3b9a1432182 Timestamp: 2026-05-07 12:28:37Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:28:37Z\\\",\\\"trace_id\\\":\\\"b18cbf88-c6d0-4caa-9af9-d2dabb673500\\\",\\\"correlation_id\\\":\\\"ead4f7c0-3077-42bb-84d0-c3b9a1432182\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d543a089-fd32-4522-9ffe-1494e562b741\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:40] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d023e7ab-3a56-433c-841b-49c58c0cb46d\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:28:41] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"9ccaf562-7a14-4f4b-8625-81e2bf970988\",\"trace_id\":\"564a362b-7ddb-49f0-a33a-b807b0440231\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5d8c-5396-45af-b4f1-348978acd054\",\"trace_id\":\"031091b8-40ce-4d57-a4e9-bc4d37034ae0\"}\n[2026-05-07 12:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02cf8f7b-abd2-4e63-87bc-3e8fce928261\",\"trace_id\":\"6752601b-1c03-48ae-a590-323cc5ed601e\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring start {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:12] local.NOTICE: Monitoring end {\"correlation_id\":\"d3765bc2-52fa-4bc4-9c94-52822e08f7a5\",\"trace_id\":\"0299fb07-ac8c-4159-ad7e-c1bce0958d25\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d59f6990-3c72-4f1b-b5fa-4035b1be1dbb\",\"trace_id\":\"d502f355-1716-4272-9dc2-79f8c70cbbf4\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:29:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e7dd39a-53bc-4359-a50f-7519f217bb9a\",\"trace_id\":\"eef97a11-0a3b-4911-be85-f37bbdc01d15\"}\n[2026-05-07 12:30:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e4a1110b-dccf-46a7-b349-539201c9c258\",\"trace_id\":\"05679e00-ab34-47d6-af74-01a412a269b5\"}\n[2026-05-07 12:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3aa037e0-524c-4f99-a2fe-9537e1034e93\",\"trace_id\":\"c8f2c739-13e2-490c-9bce-6b940c4073cc\"}\n[2026-05-07 12:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3aa037e0-524c-4f99-a2fe-9537e1034e93\",\"trace_id\":\"c8f2c739-13e2-490c-9bce-6b940c4073cc\"}\n[2026-05-07 12:30:12] local.NOTICE: Monitoring start {\"correlation_id\":\"33c6a1f2-608d-47f9-a340-97a81d930e48\",\"trace_id\":\"e07fb9c3-cf43-4caa-bb94-08be684e8e00\"}\n[2026-05-07 12:30:12] local.NOTICE: Monitoring end {\"correlation_id\":\"33c6a1f2-608d-47f9-a340-97a81d930e48\",\"trace_id\":\"e07fb9c3-cf43-4caa-bb94-08be684e8e00\"}\n[2026-05-07 12:30:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8da3e1c6-c806-4120-a0d8-8d99e640c4d3\",\"trace_id\":\"4813fc1e-67c7-495d-bafe-1c0bddb52670\"}\n[2026-05-07 12:30:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8da3e1c6-c806-4120-a0d8-8d99e640c4d3\",\"trace_id\":\"4813fc1e-67c7-495d-bafe-1c0bddb52670\"}\n[2026-05-07 12:30:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a72f5370-11f9-4960-86c6-f91c0f8f3c17\",\"trace_id\":\"c6335d80-1601-41ed-8cbe-bc4a32bca434\"}\n[2026-05-07 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:28:00, 2026-05-07 12:30:00] {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:28:00, 2026-05-07 12:30:00] {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8aae162c-20b5-41f5-9b9a-cc6b832e8802\",\"trace_id\":\"0c29315d-717e-40e7-a21e-4ee0f9ec5ca0\"}\n[2026-05-07 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"36d2678a-b734-46bd-990e-9968b2fb86d5\",\"trace_id\":\"0f9e0c4b-3fbb-400e-97a8-5b59b1c18d50\"}\n[2026-05-07 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"36d2678a-b734-46bd-990e-9968b2fb86d5\",\"trace_id\":\"0f9e0c4b-3fbb-400e-97a8-5b59b1c18d50\"}\n[2026-05-07 12:30:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3559116e-0397-44eb-a839-e397bbd4c3f4\",\"trace_id\":\"e765565d-25d2-45ab-b9a4-42ef784a60fc\"}\n[2026-05-07 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3559116e-0397-44eb-a839-e397bbd4c3f4\",\"trace_id\":\"e765565d-25d2-45ab-b9a4-42ef784a60fc\"}\n[2026-05-07 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:27] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7756bdce-9659-4c40-885e-6cb4097a770a\",\"trace_id\":\"d7767470-3342-4939-845d-800b6e7e0bc9\"}\n[2026-05-07 12:30:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:20:00, 2026-05-07 12:25:00] {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:20:00, 2026-05-07 12:25:00] {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3aef2e59-302a-485b-b9ec-20478fd20cf5\",\"trace_id\":\"1dae0aa8-c6fd-4fca-84b2-2bb76ef6721b\"}\n[2026-05-07 12:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"46c43768-14e5-4886-b06b-de9c245deaf6\",\"trace_id\":\"4a12fadf-dd6f-4277-bac7-57d6789cbf99\"}\n[2026-05-07 12:30:32] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:33] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"b5827753-349d-4c3e-8315-6edd21487988\",\"trace_id\":\"8f1a0949-4cda-47fd-b4d6-602eb0a03249\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3fce27e4-1b07-40fc-8a53-fbad08b093e2\",\"trace_id\":\"3b8bc557-6e3e-42bf-853b-b7b38c986086\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b772eb2-f1f8-46d1-afe2-8c7e5bc14182\",\"trace_id\":\"a1b68813-a4cf-4767-8a9f-dde19264b31d\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3fce27e4-1b07-40fc-8a53-fbad08b093e2\",\"trace_id\":\"3b8bc557-6e3e-42bf-853b-b7b38c986086\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:32:37.470385Z\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b772eb2-f1f8-46d1-afe2-8c7e5bc14182\",\"trace_id\":\"a1b68813-a4cf-4767-8a9f-dde19264b31d\"}\n[2026-05-07 12:30:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"101dc452-3092-4c93-b585-b80bc8b44698\",\"trace_id\":\"b65e71f7-dad2-4432-9357-c7f05e39ae8f\"}\n[2026-05-07 12:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"101dc452-3092-4c93-b585-b80bc8b44698\",\"trace_id\":\"b65e71f7-dad2-4432-9357-c7f05e39ae8f\"}\n[2026-05-07 12:30:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812319,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812320,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812321,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812322,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812323,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Dispatching activity sync job {\"import_id\":812324,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a5ef5ba-0234-42c4-baae-827103cebea9\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:42] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.ALERT: [SyncActivity] Failed {\"import_id\":812319,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"f51bdd5f-03c8-4af6-831b-086c01094688\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.ALERT: [SyncActivity] Failed {\"import_id\":812320,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"d4e15c5d-717b-4c33-a888-1f98bc199608\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:43] local.ALERT: [SyncActivity] Failed {\"import_id\":812321,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"a420fb54-7bc6-4eb3-afc4-c88d457ac2b7\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.ALERT: [SyncActivity] Failed {\"import_id\":812322,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"3330dbba-b9ee-45de-8c39-b280897cc933\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6c34890d-27f6-452c-918a-d61dfb22dc78\",\"trace_id\":\"2c6a1876-1e2d-4c90-a235-129bfc1fda30\"}\n[2026-05-07 12:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6c34890d-27f6-452c-918a-d61dfb22dc78\",\"trace_id\":\"2c6a1876-1e2d-4c90-a235-129bfc1fda30\"}\n[2026-05-07 12:30:44] local.ALERT: [SyncActivity] Failed {\"import_id\":812323,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"79f1a8bc-6445-4a65-a7e4-a4a2b273f5c4\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [SyncActivity] Start {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:44] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:14:00\",\"to\":\"2026-05-07 12:30:00\"} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:45] local.INFO: [SyncActivity] End {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:45] local.INFO: [SyncActivity] Memory usage {\"import_id\":812324,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":28981120,\"memory_real_usage\":67108864,\"pid\":26154} {\"correlation_id\":\"aebf6b71-0ddc-409f-8ec6-933f9e06059c\",\"trace_id\":\"a71be838-d91c-4f4c-94e8-e34d38d6c0eb\"}\n[2026-05-07 12:30:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a3e015c8-7c91-4457-bff4-de94482186fc\",\"trace_id\":\"2966aada-d948-4fec-8388-30f39c48648f\"}\n[2026-05-07 12:30:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a3e015c8-7c91-4457-bff4-de94482186fc\",\"trace_id\":\"2966aada-d948-4fec-8388-30f39c48648f\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:47] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c40e82b8-a5fd-4588-a637-9bd875fc31d9\",\"trace_id\":\"038436d0-e786-4dc4-98f2-f235d5e96a8d\"}\n[2026-05-07 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c40e82b8-a5fd-4588-a637-9bd875fc31d9\",\"trace_id\":\"038436d0-e786-4dc4-98f2-f235d5e96a8d\"}\n[2026-05-07 12:30:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:30:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a789fcf-bcf3-433d-8b99-9a04acf54e47\",\"trace_id\":\"b95235c3-8ded-488f-bb53-fe81a3bbe5a1\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"bee413d5-e5f8-4384-b691-e30383fcd178\",\"trace_id\":\"0da49d98-27ef-441d-8fd8-465c8dc6d31c\"}\n[2026-05-07 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"15703b0e-3148-4521-97b0-119f62d4bf9a\",\"trace_id\":\"92237a7f-8aae-4d5d-9f0d-b21fb9f33c04\"}\n[2026-05-07 12:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8970c115-8149-440f-9afd-94a6f7890ed9\",\"trace_id\":\"fef587d7-b0e8-48f0-85b9-b224f5bdbecc\"}\n[2026-05-07 12:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8970c115-8149-440f-9afd-94a6f7890ed9\",\"trace_id\":\"fef587d7-b0e8-48f0-85b9-b224f5bdbecc\"}\n[2026-05-07 12:31:08] local.NOTICE: Monitoring start {\"correlation_id\":\"8d299958-4bdf-4f50-a904-b3f63d3b6edf\",\"trace_id\":\"8ac0c53d-8ecc-4e29-a465-ff8af18b3565\"}\n[2026-05-07 12:31:08] local.NOTICE: Monitoring end {\"correlation_id\":\"8d299958-4bdf-4f50-a904-b3f63d3b6edf\",\"trace_id\":\"8ac0c53d-8ecc-4e29-a465-ff8af18b3565\"}\n[2026-05-07 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d384715e-b7f3-4ebd-be32-f9c6c9683c6a\",\"trace_id\":\"7221d562-a73d-4a09-8f67-a096ad834b43\"}\n[2026-05-07 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d384715e-b7f3-4ebd-be32-f9c6c9683c6a\",\"trace_id\":\"7221d562-a73d-4a09-8f67-a096ad834b43\"}\n[2026-05-07 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b5409ea-62f5-44c3-b853-845c2b06c164\",\"trace_id\":\"3aef745f-0a16-4db4-92d7-b4c04316fcd4\"}\n[2026-05-07 12:31:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"daa2a14e-13d8-4e03-ade8-5cf235aff8af\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"daa2a14e-13d8-4e03-ade8-5cf235aff8af\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25525984,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.42,\"usage\":25519152,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ceb90517-afd6-4f70-994b-f791459cbe9f\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25558232,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:14] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":495.28} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":516.14,\"usage\":25681432,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"253d7263-dfb3-42f8-b025-93453379f3ac\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25659360,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":21.43,\"usage\":25505056,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"79c64d03-4641-4366-9691-5b24a4e860b3\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25543424,\"real_usage\":65011712,\"pid\":26151} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}\n[2026-05-07 12:31:15] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.8,\"usage\":25498888,\"real_usage\":65011712,\"pid\":26151,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"69f05987-da80-4ff2-8ace-9b4bffb3b7f7\",\"trace_id\":\"296f7872-e07a-4834-87f8-0c4d5594054d\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1996073461129327348
|
8566805675520198815
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4ce87a9-6ca5-4efe-99b3-4220893270d0","trace_id":"724e8238-2ed5-4089-9509-9c7c12a3c373"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"172d1ae8-b8cc-4804-bed9-e32d074e265c","trace_id":"4817cdef-8d3e-4914-8bee-feffb18efe1b"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring start {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.NOTICE: Monitoring end {"correlation_id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5","trace_id":"b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.INFO: [Hubspot] Failed to fetch opportunity {"crm_id":"374720564","reason":"[429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:19] local.ERROR: [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{"status":"error","message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT","correlationId" (truncated...)
{"exception":"[object] (HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error: `GET https://api.hubapi.com/crm/v3/objects/deals/374720564?properties=hs_object_id%2Cdealname&associations=companies%2Ccontacts&archived=0` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your ten_secondly_rolling limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\" (truncated...)
at /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)
[stacktrace]
#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getByIdWithHttpInfo('374720564', 'hs_object_id,de...', 'companies,conta...', false, NULL)
#1 /home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\\BasicApi->getById('374720564', 'hs_object_id,de...', 'companies,conta...')
#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)
#3 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(351): Jiminny\\Services\\Crm\\Hubspot\\Service->syncOpportunity('374720564')
#4 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\Console\\Commands\\JiminnyDebugCommand->rateLimit()
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\Console\\Commands\\JiminnyDebugCommand->handle(Object(Jiminny\\Jobs\\JobDispatcher), Object(Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService), Object(Jiminny\\Repositories\\AutomatedReportsRepository), Object(Jiminny\\Services\\UserPilot\\UserPilotClient))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)
#11 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#13 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#18 /home/jiminny/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#19 {main}
"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344","trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dcb9b24b-e2e5-41fe-81db-212b3ca9ff7d","trace_id":"1ea62b83-9639-41e3-a523-26404c39fa80"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8","trace_id":"67798138-bdb7-4bd7-8b32-377663219a88"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a4e5e18f-9f8c-4196-ace0-bf664d4827d9","trace_id":"d75cb10b-4c76-4c00-84d4-26efeb738e17"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:30] local.NOTICE: Calendar sync start {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3789f06a-4f0c-4b12-be80-d6a36e089d1b","trace_id":"6ce89147-1624-456d-9e75-f4948f2c5db8"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: e890fdc1-dbe8-4a59-ae57-2af6bced3c00 Correlation ID: 57554cdf-16df-47f1-b0d9-5f0b8da37afe Timestamp: 2026-05-07 12:28:33Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:33Z\",\"trace_id\":\"e890fdc1-dbe8-4a59-ae57-2af6bced3c00\",\"correlation_id\":\"57554cdf-16df-47f1-b0d9-5f0b8da37afe\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2a3e5b60-5770-46f2-aca6-7b0527363000 Correlation ID: 57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2 Timestamp: 2026-05-07 12:28:34Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:34Z\",\"trace_id\":\"2a3e5b60-5770-46f2-aca6-7b0527363000\",\"correlation_id\":\"57bb0b73-9ea6-4bcf-a8f4-6e211dbb94e2\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:34] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2e34e335-a76d-40e5-bc50-3861392e4c00 Correlation ID: 9db5b389-6165-4feb-8e6e-bedc369e1c87 Timestamp: 2026-05-07 12:28:35Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:35Z\",\"trace_id\":\"2e34e335-a76d-40e5-bc50-3861392e4c00\",\"correlation_id\":\"9db5b389-6165-4feb-8e6e-bedc369e1c87\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:35] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"3015918c-9edf-487d-b1d0-97c9d00ea6b1","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 6eba7173-b781-4e55-b1fb-1087ed023000 Correlation ID: 3086e346-c6eb-4f1c-8b1d-a477ce3821f4 Timestamp: 2026-05-07 12:28:36Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 12:28:36Z\",\"trace_id\":\"6eba7173-b781-4e55-b1fb-1087ed023000\",\"correlation_id\":\"3086e346-c6eb-4f1c-8b1d-a477ce3821f4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:36] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"d543a089-fd32-4522-9ffe-1494e562b741","trace_id":"564a362b-7ddb-49f0-a33a-b807b0440231"}
[2026-05-07 12:28:37] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided...
|
3620
|
NULL
|
NULL
|
NULL
|
|
3659
|
134
|
24
|
2026-05-07T12:34:22.521035+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778157262521_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"","depth":2,"bounds":{"left":0.8976064,"top":0.92098963,"width":0.06948138,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":2,"bounds":{"left":0.8976064,"top":0.952913,"width":0.06948138,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2897863107278384685
|
-8132224210615194686
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
0(5)PhostormINavigarecodeFV faVsco.jsm Bullhorn© Client.php >obasicapl.oneD CloseD Copper> D CrmObjectsD DecorateActivity> Dummy> O Helpersv @ HubspotT ImportBatchJobTrait.phgHitp/RateLimited.png( Hubspot/.../SyncCrmEntitiesTrait.php(C) ProviderRateLimiter.php_ AccountsyncstrateayActions_contactsyncstrateayO DTO463D rielosu Journa0 Metadatav _ OpportunitvSvncStrate> D ConcernsC) HubspotlastModitie© HubspotLastModifie(c) Huosoot LastModitie© HubspotLastModifieC) HubsootLastModifieC) HubsnotSinaleSvncC. HubsnotSvncStrate@ HubsnotWebhookBm PadinationProspectSearchStratesM PedicServiceTraitsT OpportunitySyncTraT SyncCrmEntitiesTraT SyncFieldsTrait.phpWriteCrmTrait.phpMittile> C Webhook|© BatchSyncCollector.ph© BatchSvncRedisServicC) [EMAIL]) DecorateActiviv.onoCFieldDerinitions.onoC) FieldivoeConverter.of1 Hubspotclientinterfac:494C) Hubsoot TokenManade© PayloadBuilder.phpC) RemoteCrm@biectMan9) ResnonseNormalize nh(c) Service nhn@ SvncFieldAction.phpC) SvncPelatedActivitvM:class Cuient extends BasecLient imolements Hubspotc ientinterfacepublic functinnaagetcootartBy d Cstraneosecmnoovaruaxustie(ds): arraythrow new CrmException( message: 'Contact not found'):'id' => Scontact-›getIdo.properties' => Scontact-›qetProvertresol* This is emai search reauest that Hubsoot offers as Ger more denerous quotapublic function getContactByEmail(string Semail, array $fields = [J): arraytry -Scontact = Sthis->aetNewInstance@->crmO->contacts@->hasi.cAniO->aetBv1dimnlode & senarator "1 Sfields)dicrlved. Talse,id_property: 'email'return'id' => Scontact-›getIdo.'properties' => Scontact->qetPropertieso} catch (ContactApiException $e) {Sthis->loq->info('[Hubspot] Failed to fetch contact'. ['ema1l' => Sema1u'reason' => Se->qetMessageoreturn1:* athrows Ermsycentionpublic function fetchProperty(string $objectType, string $propertyId): Property(...}SonarQube for IDE suggestions: Detect more security issues in your PHP files // Try SonarQube Cloud for free // Download SonarQube Server // Learn more // Don't ask again (today 10:25)kateLImitawarewrapper.ongsyneopporunitesJoo.pnp42 A68 X2 ^Lukas/Stefka 121 - in 1h 56 mInu / May 10.34-24AskJiminnyReportActivityServiceTest -= custom.log« SF [jiminny@localhost]HS_local (jiminny@localhost]« console [PROD]& console [STAGINGI22R Match case[2026-05-07 12:28:14] local.INFO:JmInnya consoLen connanas, comnano erun remory usage for conmand "conmano"e"araLenstiont cor-accve ces"r"memoryberorevommand nnio"woz.or"memo w[2026-05-07 12:28:17] local.INF0:[SocialAccountServicel Fetching token {"socialAccountId":1499 "provider":"hubspot"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344"|2020-05-01 12.20.1/ Local.LNrU:[2026-05-07 12:28:17] local.INF0:SOCLaLACCOUnLseNveceloKenneeus etiesinnoEuSOctaLACCOUncLONe 47rOnOVedеnн nUDsро сизз всом нешатоютоми4655514-0545-40407осма-сOCOВ[EncryptedTokenManager] Generating access token. {"mode": "legacy"} {"correlation_id": "273355f2-6315-4b20-bc9a-c26c681d6344", "trace_id" : "5ea79[2026-05-07 12:28:171 local.INF0: [SocialAccountServicel Refreshing token from provider {"socialAccountId":1499, "providen": "hubspot" "refreshToken" : "96f94c623a404e02ebdbf07f1b2026-05-07 12:28:18 Local.NOTICE: Monitoring start{"correlation_ id":"31aa6b7d-00d6-448a-bdcc-a3d215b4aeb5" "trace_id"."b8eb7fe5-8471-4ffb-9bfa-a804c8e1ff72"}12026-05-08282888ocaLNOMCEH MOn tonne endcorrelation1cнаa0b0-0006-448а-bocс-as0415b4aeb5"7taсе ОяОВеруе5-844-410-90на-азо«сьен5тн2шE2026-05-07 12:28:18 Local.INF0Sf"correlation id"."273355f2-6315-4b20-bc9a-c26c681d6344" "trace id". "5ea79a26-c838-48e8-9913-93ad50814612026-05-07 12:28 18 LocalINF0:[2026-05-07 12:28:181 local. INF0:SocialAccountloserver Access token was modhrled, encrvotinol"correlation 1d":[CREDIT_CARD]-0c9a-026068106544""trace 1d":"Sea72a26.[SocialAccountService] Token refreshed {"socialAccountId":1499, "provider": "hubspot", "state": "connected"} {"correlation_id":"273355f2-6315-4b22026-05-07 12:28:18 Local.INF0:[2026-05-07 12:28:191 local, INF0:comownerReso ver Dntednattion owner matched as CRM ownenwcem orovader hubspotucom ownen r28.team a Wconnellatiion ШR 206k15512[Hubspot] Failed to fetch opportunity {"crm_id":"374720564", "reason":"[429] Client error: 'GET https://api.hubapi.com/crm/v3/objects/deals/371\"status)":"error)", "message\":\"You have reached your ten_secondly_rolling limit.", "errorType)":"RATE_LIMIT)", "correlationid)" (truncated...)"} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344"', "trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}2026-05-07 12-28-191 1oca1 ERROR 420 Mhient erron.GEl htts:an.huhan.com/com/w/nhlects/deals/374205642noonentles-hs_ohglect1d%20dealname.associat.ions=comnan.les%2%c{"status":"error", "message":"You have reached your ten_secondly_rolling limit.","errorType":"RATE_LIMIT", "correlationid" (truncated...)"pycention". " lohiec+))(HubSpot\\Client\\Crm\\Deals\\ApiException(code: 429): [429] Client error:•GFT httns://ani.huhani.com/com/v3/ohiects/deals/3747205642nnonentiec=hsoha{\"status\":\"error)",\"message)":\"You have reached your ten_secondly_rolling limit.","errorType)":"RATE_LIMIT)","correlationId)" (truncated...)at/home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php:704)- [stacktrace]—#0 /home/jiminny/vendor/hubspot/api-client/codegen/Crm/Deals/Api/BasicApi.php(676): HubSpot|\Client|\Crm\\Deals|\Api|\BasicApi->getByIdWithHttpInfo(^374720564', 'hs_object_id#1/home/jiminny/app/Services/Crm/Hubspot/Client.php(212): HubSpot\\Client\\Crm\\Deals\\Api\ \BasicApi->getById('374720564', 'hs_object_id,de...',#2/home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/0pportunitySyncTrait.php(130): Jiminny\\Services\\Crm\\Hubspot\\Client->getOpportunityById('374720564', Array)- #3 /home/jiminny/app/Console/Commands/JiminnyDebuqCommand.php (351): Jiminny|(Services||Crm|\Hubspotl|Service->syncOpportunity(^374720564')- #4 /home/jiminny/app/Console/Commands/JiminnyDebuqCommand.php(44): Jiminny\Console\Commands|JiminnyDebugCommand->rateLimitO= #5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny||Consolel|Commands||JiminnyDebugCommand->handLe(Object(Jiminny||Jobs||JobDispat#6/home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container{closurelO#7/home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate Containerl\Util::unwrapIfClosure(Obiect(Closure))= #8 /home/timinny/vendor/laraveZ/franework/src/1lluminate/Container/BoundMethod,pho (35): Illuminatel |Containerl |BoundMethod: :ca11BoundMethod (CObtect (T1Luminatel | Foundationl lADD# Tnome1aminnyvendor/laraveutr.meworkzsec a a a uumanatez contanner contasner,oho vssar aa umnate acontannen a Boundet noo acal a cuonect o a u uma nate aoundati on aVADol I1cat 1OnDIPAT#10/home/jiminnv/vendor/laravel/framework/src/Illuminate/Console/Command.phv(211): Illuminatel\Container|\Container->cal1(Arrav)#iu Thome /Timinny vendor/svmfony.and//Command.oho (3410: TluminateConsoleConnand->execute(Obiect SumfonyComoonent Console inout Aravinout). Obiect anlumina#12/home/jiminnv/vendor/laravel/framework/src/Illuminate/Console/Command.pho(180): Svmfonv|\Component|\Consolel\Commland! \Command->run(Obiect (Svmfonv) \Componentl \Consolel \InouFK 7home/E5iminny/vendon//symtonv/ consol le//Aoo 5 cation -oho GunvDR tu lumi nate uonso la ucommand»» nun cobr e ci es vmtonv comoonenta aconso le iunouta lAray nouta. obrtect esvm ionv Ncomoon#14 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\Component\\Console\\Application->doRunCommand(Object(Jiminny\\Console\\Commands\\JiminnyDebugCommand),#151Zhome/E5m nny/ vendor/symtonv/ Conso le//Aoo 5 cataon-Oho 0195)F Sem ony ucomoonenta Nconso Le IVADo l6 catiion->doRun Cb leci 7 esvm on acomoonenta Nconsol le lv noura lVAcay noua r obiect TeSV= #16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony|\Component| \Consolel\Application->run(0biect(Svmfonv||Component||Consolelwwhome/E6m.Innw//Mendow/lanavelWEdoamewon.scc7atllmTattel/soundatalon//An0GTcataTonunh0/Gl/k1.9katbmElnatteEoundatalon.lonsolalkernehandleldlElecasvmonv/uTomnonentalionsolel#18 /home/&iminnv/antisan(13): Tlluminatel|Foundation| \AnnLication->handleCommand(0biect(Svmfonv|\Comnonent||Console||Tnnut|\AravTnnut))#10 <main?- "} {"correlation_id":"273355f2-6315-4b20-bc9a-c26c681d6344", "trace_id":"5ea79a26-c838-48e8-9913-93ad508146a6"}12026-05-07 1222842010calLNEDR Vimiinny Monsolla Wommands VCommandaanun Memonv nisade hefone stantiino command Elcommand" «"masilhoyaskin-Wistcanefnesh" "memonvRefoneRommandTnMhlr[2026-05-07 12:28:20] Local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command" : "mailbox:skip-lists:refresh", "memoryBeforeCommandInMb" : 62.0, "memoryCAmMANd EWCommanduClmAtllhAydhatChanencocell lmemoayRefanedommandiaMЬШa10 n[2026-05-07 12:28:24] local.INF0:12024-05-07 12.29.241 1oc01 TAE0•[EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8"' "trace_id":"67798138[EmailSchedule] FINISHED batch process {"host":"docker lamp 1" "processed":0} {"correlation id":"d191d5c6-133f-43e1-8ed4-d285d0c768b8" "trace[2026-05-07 12:28:24] local.INF0: Jiminny|Console\Commands\Command::run Memory usage for command {"command": "mailbox:batch:process", "memoryBeforeCommandInMb" :62.0, "memoryAfter[2026-05-07 12:28:27] local.INF0: Jiminny|Console\Commands\Command::run Memory usage before starting command {"command": "conference:moniton:count", "memoryBeforeCommandInMb" : 62[2026-05-07 12:28:27] local.INF0: Running conference:moniton:count command for activities in (2026-05-07 12:26:00, 2026-05-07 12:28:001 {"conrelation id":"a4e5e18f-9f8c-4196-[2026-05-07 12:28:27] local.INF0:[conference:monitor:count] No activities found in (2026-05-07 12:26:00, 2026-05-07 12:28:00] {"correlation id":"a4e5e18f-9f8c-4196-ace0-bf66W Windsurf Teamio 4 spaces...
|
3655
|
NULL
|
NULL
|
NULL
|
|
3695
|
136
|
8
|
2026-05-07T12:36:15.986796+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778157375986_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:34:39] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":32728,"workerId":"","target":"activities"} {"correlation_id":"2dc91923-2a7f-4251-9ddd-5663739b2850","trace_id":"2bc19bcd-96d0-45d9-b13c-1c1dba7aff9f"}
[2026-05-07 12:35:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0","trace_id":"da1dcdd2-a656-4e5e-8a4b-c714d1175381"}
[2026-05-07 12:35:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0","trace_id":"da1dcdd2-a656-4e5e-8a4b-c714d1175381"}
[2026-05-07 12:35:08] local.NOTICE: Monitoring start {"correlation_id":"cc05b2e5-39a2-4fb1-8859-871c3d987279","trace_id":"168cc802-ec5c-4bfd-bfa8-45571e2946cc"}
[2026-05-07 12:35:08] local.NOTICE: Monitoring end {"correlation_id":"cc05b2e5-39a2-4fb1-8859-871c3d987279","trace_id":"168cc802-ec5c-4bfd-bfa8-45571e2946cc"}
[2026-05-07 12:35:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8fdc327b-c3dd-4eed-b9a9-00cc263ed461","trace_id":"2b164538-6384-413e-a68b-589aabda4af3"}
[2026-05-07 12:35:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8fdc327b-c3dd-4eed-b9a9-00cc263ed461","trace_id":"2b164538-6384-413e-a68b-589aabda4af3"}
[2026-05-07 12:35:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ef495688-effa-4ee7-9b81-ccb161f7c3bf","trace_id":"26eabbbc-6174-434e-9756-1b84825f03ab"}
[2026-05-07 12:35:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ef495688-effa-4ee7-9b81-ccb161f7c3bf","trace_id":"26eabbbc-6174-434e-9756-1b84825f03ab"}
[2026-05-07 12:35:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aac3580d-654c-4490-ab7d-7d91ff1ce423","trace_id":"c35dd663-0ae1-4d03-b56d-120bf7292ecb"}
[2026-05-07 12:35:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aac3580d-654c-4490-ab7d-7d91ff1ce423","trace_id":"c35dd663-0ae1-4d03-b56d-120bf7292ecb"}
[2026-05-07 12:35:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:18] local.INFO: Running pre-meeting notification command {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:30","to":"12:35"} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:25","to":"02:30"} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"de4aa643-9d23-4d24-8c6a-ba951496144e","trace_id":"169c2fe6-d32d-45e5-9682-6ae91ce0396f"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e37299b2-0176-4eac-815f-0caabf7af320","trace_id":"c47be302-8931-4988-a55d-3560a61143b6"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"de4aa643-9d23-4d24-8c6a-ba951496144e","trace_id":"169c2fe6-d32d-45e5-9682-6ae91ce0396f"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:37:36.789343Z"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e37299b2-0176-4eac-815f-0caabf7af320","trace_id":"c47be302-8931-4988-a55d-3560a61143b6"}
[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4","trace_id":"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02"}
[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4","trace_id":"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02"}
[2026-05-07 12:35:36] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4","trace_id":"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02"}
[2026-05-07 12:35:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4","trace_id":"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02"}
[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"4374f995-b892-49b7-9eaf-d80bcf1eaec2","trace_id":"a0f4c391-5090-49ea-8a57-80d06a576d54"}
[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"4374f995-b892-49b7-9eaf-d80bcf1eaec2","trace_id":"a0f4c391-5090-49ea-8a57-80d06a576d54"}
[2026-05-07 12:35:58] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4374f995-b892-49b7-9eaf-d80bcf1eaec2","trace_id":"a0f4c391-5090-49ea-8a57-80d06a576d54"}
[2026-05-07 12:35:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"4374f995-b892-49b7-9eaf-d80bcf1eaec2","trace_id":"a0f4c391-5090-49ea-8a57-80d06a576d54"}
[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:36:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b6fa3d42-16e4-4eab-b363-13c6cfb7b814","trace_id":"590f9853-355e-49a5-ae3b-99a357cb7f43"}
[2026-05-07 12:36:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b6fa3d42-16e4-4eab-b363-13c6cfb7b814","trace_id":"590f9853-355e-49a5-ae3b-99a357cb7f43"}
[2026-05-07 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b6fa3d42-16e4-4eab-b363-13c6cfb7b814","trace_id":"590f9853-355e-49a5-ae3b-99a357cb7f43"}
[2026-05-07 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ef13206-7c40-464d-a0af-bbaa723080ff","trace_id":"fdc7e389-cf4c-4c13-a27d-199959e4691f"}
[2026-05-07 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ef13206-7c40-464d-a0af-bbaa723080ff","trace_id":"fdc7e389-cf4c-4c13-a27d-199959e4691f"}
[2026-05-07 12:36:13] local.NOTICE: Monitoring start {"correlation_id":"87589fd8-76e4-41f4-afe5-f442201ab71c","trace_id":"ad59c3de-6d0c-4487-b721-0dfcba13ba89"}
[2026-05-07 12:36:13] local.NOTICE: Monitoring end {"correlation_id":"87589fd8-76e4-41f4-afe5-f442201ab71c","trace_id":"ad59c3de-6d0c-4487-b721-0dfcba13ba89"}...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.68484044,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.69348407,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"bounds":{"left":0.7044548,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"bounds":{"left":0.7130984,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"bounds":{"left":0.72174203,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"bounds":{"left":0.73038566,"top":0.07821229,"width":0.032247342,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"bounds":{"left":0.76263297,"top":0.07821229,"width":0.023271276,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"bounds":{"left":0.7859042,"top":0.07821229,"width":0.022938829,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"bounds":{"left":0.8088431,"top":0.08220271,"width":0.0019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:34:39] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":32728,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"2dc91923-2a7f-4251-9ddd-5663739b2850\",\"trace_id\":\"2bc19bcd-96d0-45d9-b13c-1c1dba7aff9f\"}\n[2026-05-07 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0\",\"trace_id\":\"da1dcdd2-a656-4e5e-8a4b-c714d1175381\"}\n[2026-05-07 12:35:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0\",\"trace_id\":\"da1dcdd2-a656-4e5e-8a4b-c714d1175381\"}\n[2026-05-07 12:35:08] local.NOTICE: Monitoring start {\"correlation_id\":\"cc05b2e5-39a2-4fb1-8859-871c3d987279\",\"trace_id\":\"168cc802-ec5c-4bfd-bfa8-45571e2946cc\"}\n[2026-05-07 12:35:08] local.NOTICE: Monitoring end {\"correlation_id\":\"cc05b2e5-39a2-4fb1-8859-871c3d987279\",\"trace_id\":\"168cc802-ec5c-4bfd-bfa8-45571e2946cc\"}\n[2026-05-07 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8fdc327b-c3dd-4eed-b9a9-00cc263ed461\",\"trace_id\":\"2b164538-6384-413e-a68b-589aabda4af3\"}\n[2026-05-07 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8fdc327b-c3dd-4eed-b9a9-00cc263ed461\",\"trace_id\":\"2b164538-6384-413e-a68b-589aabda4af3\"}\n[2026-05-07 12:35:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef495688-effa-4ee7-9b81-ccb161f7c3bf\",\"trace_id\":\"26eabbbc-6174-434e-9756-1b84825f03ab\"}\n[2026-05-07 12:35:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef495688-effa-4ee7-9b81-ccb161f7c3bf\",\"trace_id\":\"26eabbbc-6174-434e-9756-1b84825f03ab\"}\n[2026-05-07 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aac3580d-654c-4490-ab7d-7d91ff1ce423\",\"trace_id\":\"c35dd663-0ae1-4d03-b56d-120bf7292ecb\"}\n[2026-05-07 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aac3580d-654c-4490-ab7d-7d91ff1ce423\",\"trace_id\":\"c35dd663-0ae1-4d03-b56d-120bf7292ecb\"}\n[2026-05-07 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:18] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"de4aa643-9d23-4d24-8c6a-ba951496144e\",\"trace_id\":\"169c2fe6-d32d-45e5-9682-6ae91ce0396f\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e37299b2-0176-4eac-815f-0caabf7af320\",\"trace_id\":\"c47be302-8931-4988-a55d-3560a61143b6\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"de4aa643-9d23-4d24-8c6a-ba951496144e\",\"trace_id\":\"169c2fe6-d32d-45e5-9682-6ae91ce0396f\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:37:36.789343Z\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e37299b2-0176-4eac-815f-0caabf7af320\",\"trace_id\":\"c47be302-8931-4988-a55d-3560a61143b6\"}\n[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ef13206-7c40-464d-a0af-bbaa723080ff\",\"trace_id\":\"fdc7e389-cf4c-4c13-a27d-199959e4691f\"}\n[2026-05-07 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ef13206-7c40-464d-a0af-bbaa723080ff\",\"trace_id\":\"fdc7e389-cf4c-4c13-a27d-199959e4691f\"}\n[2026-05-07 12:36:13] local.NOTICE: Monitoring start {\"correlation_id\":\"87589fd8-76e4-41f4-afe5-f442201ab71c\",\"trace_id\":\"ad59c3de-6d0c-4487-b721-0dfcba13ba89\"}\n[2026-05-07 12:36:13] local.NOTICE: Monitoring end {\"correlation_id\":\"87589fd8-76e4-41f4-afe5-f442201ab71c\",\"trace_id\":\"ad59c3de-6d0c-4487-b721-0dfcba13ba89\"}","depth":4,"bounds":{"left":0.52859044,"top":0.10454908,"width":0.47140956,"height":0.89545095},"on_screen":true,"value":"[2026-05-07 12:34:39] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":32728,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"2dc91923-2a7f-4251-9ddd-5663739b2850\",\"trace_id\":\"2bc19bcd-96d0-45d9-b13c-1c1dba7aff9f\"}\n[2026-05-07 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0\",\"trace_id\":\"da1dcdd2-a656-4e5e-8a4b-c714d1175381\"}\n[2026-05-07 12:35:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0\",\"trace_id\":\"da1dcdd2-a656-4e5e-8a4b-c714d1175381\"}\n[2026-05-07 12:35:08] local.NOTICE: Monitoring start {\"correlation_id\":\"cc05b2e5-39a2-4fb1-8859-871c3d987279\",\"trace_id\":\"168cc802-ec5c-4bfd-bfa8-45571e2946cc\"}\n[2026-05-07 12:35:08] local.NOTICE: Monitoring end {\"correlation_id\":\"cc05b2e5-39a2-4fb1-8859-871c3d987279\",\"trace_id\":\"168cc802-ec5c-4bfd-bfa8-45571e2946cc\"}\n[2026-05-07 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8fdc327b-c3dd-4eed-b9a9-00cc263ed461\",\"trace_id\":\"2b164538-6384-413e-a68b-589aabda4af3\"}\n[2026-05-07 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8fdc327b-c3dd-4eed-b9a9-00cc263ed461\",\"trace_id\":\"2b164538-6384-413e-a68b-589aabda4af3\"}\n[2026-05-07 12:35:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef495688-effa-4ee7-9b81-ccb161f7c3bf\",\"trace_id\":\"26eabbbc-6174-434e-9756-1b84825f03ab\"}\n[2026-05-07 12:35:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef495688-effa-4ee7-9b81-ccb161f7c3bf\",\"trace_id\":\"26eabbbc-6174-434e-9756-1b84825f03ab\"}\n[2026-05-07 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aac3580d-654c-4490-ab7d-7d91ff1ce423\",\"trace_id\":\"c35dd663-0ae1-4d03-b56d-120bf7292ecb\"}\n[2026-05-07 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aac3580d-654c-4490-ab7d-7d91ff1ce423\",\"trace_id\":\"c35dd663-0ae1-4d03-b56d-120bf7292ecb\"}\n[2026-05-07 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:18] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"de4aa643-9d23-4d24-8c6a-ba951496144e\",\"trace_id\":\"169c2fe6-d32d-45e5-9682-6ae91ce0396f\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e37299b2-0176-4eac-815f-0caabf7af320\",\"trace_id\":\"c47be302-8931-4988-a55d-3560a61143b6\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"de4aa643-9d23-4d24-8c6a-ba951496144e\",\"trace_id\":\"169c2fe6-d32d-45e5-9682-6ae91ce0396f\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:37:36.789343Z\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e37299b2-0176-4eac-815f-0caabf7af320\",\"trace_id\":\"c47be302-8931-4988-a55d-3560a61143b6\"}\n[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ef13206-7c40-464d-a0af-bbaa723080ff\",\"trace_id\":\"fdc7e389-cf4c-4c13-a27d-199959e4691f\"}\n[2026-05-07 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ef13206-7c40-464d-a0af-bbaa723080ff\",\"trace_id\":\"fdc7e389-cf4c-4c13-a27d-199959e4691f\"}\n[2026-05-07 12:36:13] local.NOTICE: Monitoring start {\"correlation_id\":\"87589fd8-76e4-41f4-afe5-f442201ab71c\",\"trace_id\":\"ad59c3de-6d0c-4487-b721-0dfcba13ba89\"}\n[2026-05-07 12:36:13] local.NOTICE: Monitoring end {\"correlation_id\":\"87589fd8-76e4-41f4-afe5-f442201ab71c\",\"trace_id\":\"ad59c3de-6d0c-4487-b721-0dfcba13ba89\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false}]...
|
2183178296581963220
|
-3017012255716168531
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:34:39] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":32728,"workerId":"","target":"activities"} {"correlation_id":"2dc91923-2a7f-4251-9ddd-5663739b2850","trace_id":"2bc19bcd-96d0-45d9-b13c-1c1dba7aff9f"}
[2026-05-07 12:35:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0","trace_id":"da1dcdd2-a656-4e5e-8a4b-c714d1175381"}
[2026-05-07 12:35:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0","trace_id":"da1dcdd2-a656-4e5e-8a4b-c714d1175381"}
[2026-05-07 12:35:08] local.NOTICE: Monitoring start {"correlation_id":"cc05b2e5-39a2-4fb1-8859-871c3d987279","trace_id":"168cc802-ec5c-4bfd-bfa8-45571e2946cc"}
[2026-05-07 12:35:08] local.NOTICE: Monitoring end {"correlation_id":"cc05b2e5-39a2-4fb1-8859-871c3d987279","trace_id":"168cc802-ec5c-4bfd-bfa8-45571e2946cc"}
[2026-05-07 12:35:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8fdc327b-c3dd-4eed-b9a9-00cc263ed461","trace_id":"2b164538-6384-413e-a68b-589aabda4af3"}
[2026-05-07 12:35:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8fdc327b-c3dd-4eed-b9a9-00cc263ed461","trace_id":"2b164538-6384-413e-a68b-589aabda4af3"}
[2026-05-07 12:35:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ef495688-effa-4ee7-9b81-ccb161f7c3bf","trace_id":"26eabbbc-6174-434e-9756-1b84825f03ab"}
[2026-05-07 12:35:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ef495688-effa-4ee7-9b81-ccb161f7c3bf","trace_id":"26eabbbc-6174-434e-9756-1b84825f03ab"}
[2026-05-07 12:35:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aac3580d-654c-4490-ab7d-7d91ff1ce423","trace_id":"c35dd663-0ae1-4d03-b56d-120bf7292ecb"}
[2026-05-07 12:35:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aac3580d-654c-4490-ab7d-7d91ff1ce423","trace_id":"c35dd663-0ae1-4d03-b56d-120bf7292ecb"}
[2026-05-07 12:35:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:18] local.INFO: Running pre-meeting notification command {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:30","to":"12:35"} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:25","to":"02:30"} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"de4aa643-9d23-4d24-8c6a-ba951496144e","trace_id":"169c2fe6-d32d-45e5-9682-6ae91ce0396f"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e37299b2-0176-4eac-815f-0caabf7af320","trace_id":"c47be302-8931-4988-a55d-3560a61143b6"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"de4aa643-9d23-4d24-8c6a-ba951496144e","trace_id":"169c2fe6-d32d-45e5-9682-6ae91ce0396f"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:37:36.789343Z"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e37299b2-0176-4eac-815f-0caabf7af320","trace_id":"c47be302-8931-4988-a55d-3560a61143b6"}
[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4","trace_id":"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02"}
[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4","trace_id":"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02"}
[2026-05-07 12:35:36] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4","trace_id":"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02"}
[2026-05-07 12:35:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4","trace_id":"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02"}
[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"4374f995-b892-49b7-9eaf-d80bcf1eaec2","trace_id":"a0f4c391-5090-49ea-8a57-80d06a576d54"}
[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"4374f995-b892-49b7-9eaf-d80bcf1eaec2","trace_id":"a0f4c391-5090-49ea-8a57-80d06a576d54"}
[2026-05-07 12:35:58] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4374f995-b892-49b7-9eaf-d80bcf1eaec2","trace_id":"a0f4c391-5090-49ea-8a57-80d06a576d54"}
[2026-05-07 12:35:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"4374f995-b892-49b7-9eaf-d80bcf1eaec2","trace_id":"a0f4c391-5090-49ea-8a57-80d06a576d54"}
[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:36:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b6fa3d42-16e4-4eab-b363-13c6cfb7b814","trace_id":"590f9853-355e-49a5-ae3b-99a357cb7f43"}
[2026-05-07 12:36:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b6fa3d42-16e4-4eab-b363-13c6cfb7b814","trace_id":"590f9853-355e-49a5-ae3b-99a357cb7f43"}
[2026-05-07 12:36:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b6fa3d42-16e4-4eab-b363-13c6cfb7b814","trace_id":"590f9853-355e-49a5-ae3b-99a357cb7f43"}
[2026-05-07 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ef13206-7c40-464d-a0af-bbaa723080ff","trace_id":"fdc7e389-cf4c-4c13-a27d-199959e4691f"}
[2026-05-07 12:36:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ef13206-7c40-464d-a0af-bbaa723080ff","trace_id":"fdc7e389-cf4c-4c13-a27d-199959e4691f"}
[2026-05-07 12:36:13] local.NOTICE: Monitoring start {"correlation_id":"87589fd8-76e4-41f4-afe5-f442201ab71c","trace_id":"ad59c3de-6d0c-4487-b721-0dfcba13ba89"}
[2026-05-07 12:36:13] local.NOTICE: Monitoring end {"correlation_id":"87589fd8-76e4-41f4-afe5-f442201ab71c","trace_id":"ad59c3de-6d0c-4487-b721-0dfcba13ba89"}...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3696
|
135
|
6
|
2026-05-07T12:36:16.050018+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778157376050_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:34:39] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":32728,"workerId":"","target":"activities"} {"correlation_id":"2dc91923-2a7f-4251-9ddd-5663739b2850","trace_id":"2bc19bcd-96d0-45d9-b13c-1c1dba7aff9f"}
[2026-05-07 12:35:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0","trace_id":"da1dcdd2-a656-4e5e-8a4b-c714d1175381"}
[2026-05-07 12:35:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0","trace_id":"da1dcdd2-a656-4e5e-8a4b-c714d1175381"}
[2026-05-07 12:35:08] local.NOTICE: Monitoring start {"correlation_id":"cc05b2e5-39a2-4fb1-8859-871c3d987279","trace_id":"168cc802-ec5c-4bfd-bfa8-45571e2946cc"}
[2026-05-07 12:35:08] local.NOTICE: Monitoring end {"correlation_id":"cc05b2e5-39a2-4fb1-8859-871c3d987279","trace_id":"168cc802-ec5c-4bfd-bfa8-45571e2946cc"}
[2026-05-07 12:35:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8fdc327b-c3dd-4eed-b9a9-00cc263ed461","trace_id":"2b164538-6384-413e-a68b-589aabda4af3"}
[2026-05-07 12:35:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8fdc327b-c3dd-4eed-b9a9-00cc263ed461","trace_id":"2b164538-6384-413e-a68b-589aabda4af3"}
[2026-05-07 12:35:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ef495688-effa-4ee7-9b81-ccb161f7c3bf","trace_id":"26eabbbc-6174-434e-9756-1b84825f03ab"}
[2026-05-07 12:35:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ef495688-effa-4ee7-9b81-ccb161f7c3bf","trace_id":"26eabbbc-6174-434e-9756-1b84825f03ab"}
[2026-05-07 12:35:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aac3580d-654c-4490-ab7d-7d91ff1ce423","trace_id":"c35dd663-0ae1-4d03-b56d-120bf7292ecb"}
[2026-05-07 12:35:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aac3580d-654c-4490-ab7d-7d91ff1ce423","trace_id":"c35dd663-0ae1-4d03-b56d-120bf7292ecb"}
[2026-05-07 12:35:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:18] local.INFO: Running pre-meeting notification command {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:30","to":"12:35"} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:25","to":"02:30"} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"de4aa643-9d23-4d24-8c6a-ba951496144e","trace_id":"169c2fe6-d32d-45e5-9682-6ae91ce0396f"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e37299b2-0176-4eac-815f-0caabf7af320","trace_id":"c47be302-8931-4988-a55d-3560a61143b6"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"de4aa643-9d23-4d24-8c6a-ba951496144e","trace_id":"169c2fe6-d32d-45e5-9682-6ae91ce0396f"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:37:36.789343Z"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldDefinition array{
* name: string,
* label: string,
* description: string,
* type: string,
* fieldType: string,
* hidden: bool,
* showCurrencySymbol: bool,
* options: array<array{
* id: string,
* label: string,
* value?: string,
* }
*/
class Service extends BaseService implements
HubspotInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
SendSummaryToCrmInterface,
MatchDomainByEmailInterface,
SavePlaybackLinkToCrmInterface,
RemoteEntityManipulationInterface,
FetchRelatedActivityInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
VerifyTaskExistsInterface
{
use ResolveCompanyNameByEmailTrait;
use SyncCrmEntitiesTrait;
use WriteCrmTrait;
use SyncFieldsTrait;
use OpportunitySyncTrait;
private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;
private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';
private const int BATCH_UPDATE_LIMIT = 100;
private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';
private const int TEN_SECONDLY_ROLLING_LIMIT = 10;
private const string CALLS_SEARCH_ENDPOINT = '[URL_WITH_CREDENTIALS] ClientInterface|Client
*/
protected $client;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected ProspectPhotoPathService $prospectPhotoPathService;
private SyncFieldAction $syncFieldAction;
private PayloadBuilder $payloadBuilder;
private SyncRelatedActivityManager $syncRelatedActivityManager;
private SyncArchivedProfilesAction $syncArchivedProfilesAction;
private WebhookSyncBatchProcessor $batchProcessor;
public function __construct(
Client $client,
SyncFieldAction $syncFieldAction,
PayloadBuilder $payloadBuilder,
ProspectPhotoPathService $prospectPhotoPathService,
SyncArchivedProfilesAction $syncArchivedProfilesAction,
WebhookSyncBatchProcessor $batchProcessor,
) {
parent::__construct();
$this->client = $client;
$this->syncFieldAction = $syncFieldAction;
$this->prospectPhotoPathService = $prospectPhotoPathService;
$this->payloadBuilder = $payloadBuilder;
$this->syncArchivedProfilesAction = $syncArchivedProfilesAction;
$this->batchProcessor = $batchProcessor;
$this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [
'client' => $this->client,
]);
$this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [
'client' => $this->client,
'payloadBuilder' => $this->payloadBuilder,
'logger' => $this->logger,
]);
$this->crmEntityRepository = app(CrmEntityRepository::class);
$this->dealFieldsService = app(DealFieldsService::class);
}
public function getDisplayName(): string
{
return 'HubSpot';
}
protected function getOAuthAccount(User $user): ?SocialAccount
{
// In this case, the Account Owner is always the connection for any API operations.
$owner = $user->team->owner;
return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);
}
public function getClient(): Client
{
/** @var Client */
return $this->client;
}
/**
* Convert raw field data into a format compatible with CRM APIs.
*
* @param bool $internal Direction of the conversion.
* True is pulling from CRM, false normalize before sending to CRM.
*/
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return ValueNormalizer::normalize(
fieldType: $fieldType,
fieldValue: $fieldValue,
isInbound: $internal,
);
}
/**
* @inheritdoc
*/
public function getDefaultFields(string $activityType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
$defaultFields = FieldDefinitions::defaultTaskFields();
// This lazy creates these fields if not already setup.
foreach ($defaultFields as $defaultField) {
$fields[] = $this->config->fields()->firstOrCreate($defaultField);
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function getDefaultActivityField(string $activityType): Field
{
/** @var Field $activityField */
$activityField = $this->config->fields()->where([
'crm_provider_id' => 'activityType',
'object_type' => $activityType,
])->first();
return $activityField;
}
/**
* @inheritdoc
*/
public function getSupportedPlaybookTypes(): array
{
return [Playbook::ACTIVITY_TYPE_TASK];
}
/**
* @inheritdoc
*/
public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
// Outcome should always be provided calls/meetings.
$fieldData = [
[
'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',
'object_type' => Field::OBJECT_TASK,
],
];
foreach ($fieldData as $data) {
$field = $this->config->fields()->where($data)->first();
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
}
return $fields;
}
public function getDealInsightsFields(): array
{
return FieldDefinitions::dealInsightsFields();
}
protected function getDefaultFollowupLayoutFields(string $activityType): array
{
$fields = [];
$fieldRepo = app(FieldRepository::class);
$fieldData = FieldDefinitions::followupFieldsFilter();
foreach ($fieldData as $data) {
$field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function syncField(Field $field): void
{
switch ($field->object_type) {
case Field::OBJECT_ACCOUNT:
$crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_CONTACT:
$crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_OPPORTUNITY:
$crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_TASK:
$this->syncSingleTaskField($field);
return;
default:
return;
}
$this->syncFieldAction->execute($field, $crmField->toArray());
}
/**
* @param array<array{
* id:string,
* label:string,
* value?:string
* }> $options
*
* @throws CrmException
*
* @return FieldData[]
*
*/
public function importPicklistValues(
Field $field,
array $options = [['id' => '', 'label' => '', 'value' => '']],
): array {
if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {
// We already have the options, no need to fetch them again
return $this->importOptions($field, $options);
}
$options = [];
switch ($field->getObjectType()) {
case Field::OBJECT_ACCOUNT:
$options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());
break;
case Field::OBJECT_CONTACT:
$options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());
break;
case Field::OBJECT_OPPORTUNITY:
// Hubspot has different endpoint for stages
$options = $this->getClient()->fetchOpportunityFieldOptions($field);
break;
case Field::OBJECT_TASK:
if ($field->getCrmProviderId() === 'disposition') {
$options = $this->getClient()->fetchDispositionFieldOptions();
} elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {
$options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);
}
break;
default:
$this->logger->warning('Invalid object type', [
'object_type' => $field->getObjectType(),
'field_id' => $field->getId(),
]);
throw new CrmException('Invalid object type');
}
return $this->importOptions($field, $options);
}
/**
* @inheritdoc
*/
public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage
{
$missingStage = null;
try {
// Use the HubSpot API client instead of the SDK crmPipelines() method
$endpoint = self::getDealsPipelinesEndpoint();
$pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);
$pipelines = $pipelinesResponse->data->results;
} catch (RequestException|BadRequest $exception) {
throw $exception;
}
foreach ($pipelines as $pipeline) {
$stages = [];
// We create a business process to contain the pipeline, and store all stages against it.
$p = ResponseNormalize::normalizePipeline($pipeline);
// Create/update business process for this pipeline
$businessProcess = $this->config->businessProcesses()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'type' => BusinessProcess::TYPE_OPPORTUNITY,
'is_selectable' => $p['active'],
]);
// A record type is really a clone of the business process, used to store which record uses which pipeline.
// Create/update record type clone
$this->config->recordTypes()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'is_selectable' => $p['active'],
'business_process_id' => $businessProcess->id ?? null,
]);
// Stages - fetch all existing stages upfront to avoid N+1 queries
$existingStages = $this->config->stages()
->withTrashed()
->where('type', Stage::TYPE_OPPORTUNITY)
->get()
->keyBy('crm_provider_id');
foreach ($p['stages'] as $dealStage) {
$s = ResponseNormalize::normalizeDealStage($dealStage);
/** @var ?Stage $existingStage */
$existingStage = $existingStages->get($s['id']);
// Restore soft-deleted stages that are now active in HubSpot
if ($existingStage?->trashed() && $s['active']) {
$existingStage->restore();
}
// Upsert stage (updates soft-deleted records without restoring them)
$stage = $this->config->stages()->withTrashed()->updateOrCreate([
'crm_provider_id' => $s['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($s['label'], 0, 50),
'label' => mb_strimwidth($s['label'], 0, 191),
'type' => Stage::TYPE_OPPORTUNITY,
'sequence' => $s['displayOrder'],
'is_selectable' => $s['active'],
'probability' => $s['probability'] * 100,
]);
if ($missingStageName === $s['id']) {
$missingStage = $stage;
}
$stages[] = $stage->id;
}
$businessProcess->stages()->sync($stages);
}
return $missingStage;
}
/**
* @inheritdoc
*/
public function syncOrganization(): void
{
try {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function find(string $name, array $scopes): array
{
$count = $this->limit ?? 20;
$offset = $this->offset ?? 0;
/** @var array<int, array<string, mixed>> */
return Cache::remember(
key: $this->team->getId() . $name . $count . $offset,
ttl: 300,
callback: function () use ($name, $offset, $count): array {
$data = [];
// Use the new V3 API to find contacts based on additional fields.
foreach (['companies', 'contacts'] as $objectType) {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$ownerId = null;
if ($crmAccountId === null) {
return $data;
}
if ($userId) {
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
$ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
$closedStages = $this->getClosedDealStages();
$payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(
$this->config,
$crmAccountId,
$closedStages,
);
$results = $this->client->getPaginatedData($payload, 'deals');
foreach ($results['results'] as $object) {
$properties = $object['properties'];
$amount = null;
if (empty($properties['amount']) === false) {
$currency = $properties['deal_currency_code'] ?? $this->config->default_currency;
// Values can contain commas and any junk so strip them.
$value = (float) preg_replace('/[^\d.]/', '', $properties['amount']);
$amount = formatCurrency($value, $currency);
}
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
if ($businessProcess === null) {
// Import it.
$stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
} else {
$stage = $businessProcess
->stages()
->where('crm_provider_id', $properties['dealstage'])
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
if ($stage === null) {
// Import it.
$stage = $this->importStages(null, $properties['dealstage']);
}
}
$recordType = null;
if ($businessProcess) {
$recordType = $businessProcess->recordTypes()->first();
}
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$record = [
'crmId' => $object['id'],
'name' => $properties['dealname'] ?? 'Unknown Deal',
'value' => $amount,
'won' => $isWon,
'closed' => $isWon || $isLost,
'stage' => [
'id' => $stage?->getUuid() ?? '',
'name' => $stage?->getName() ?? '',
],
];
if ($recordType) {
$record += [
'recordType' => [
'id' => $recordType->id_string,
'name' => $recordType->name,
],
];
}
if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
}
/**
* @inheritdoc
*/
public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array
{
$data = [];
switch ($objectType) {
case 'contact':
$hsObject = 'contact';
break;
case 'account':
$hsObject = 'company';
break;
default:
...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:34:39] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":32728,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"2dc91923-2a7f-4251-9ddd-5663739b2850\",\"trace_id\":\"2bc19bcd-96d0-45d9-b13c-1c1dba7aff9f\"}\n[2026-05-07 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0\",\"trace_id\":\"da1dcdd2-a656-4e5e-8a4b-c714d1175381\"}\n[2026-05-07 12:35:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0\",\"trace_id\":\"da1dcdd2-a656-4e5e-8a4b-c714d1175381\"}\n[2026-05-07 12:35:08] local.NOTICE: Monitoring start {\"correlation_id\":\"cc05b2e5-39a2-4fb1-8859-871c3d987279\",\"trace_id\":\"168cc802-ec5c-4bfd-bfa8-45571e2946cc\"}\n[2026-05-07 12:35:08] local.NOTICE: Monitoring end {\"correlation_id\":\"cc05b2e5-39a2-4fb1-8859-871c3d987279\",\"trace_id\":\"168cc802-ec5c-4bfd-bfa8-45571e2946cc\"}\n[2026-05-07 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8fdc327b-c3dd-4eed-b9a9-00cc263ed461\",\"trace_id\":\"2b164538-6384-413e-a68b-589aabda4af3\"}\n[2026-05-07 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8fdc327b-c3dd-4eed-b9a9-00cc263ed461\",\"trace_id\":\"2b164538-6384-413e-a68b-589aabda4af3\"}\n[2026-05-07 12:35:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef495688-effa-4ee7-9b81-ccb161f7c3bf\",\"trace_id\":\"26eabbbc-6174-434e-9756-1b84825f03ab\"}\n[2026-05-07 12:35:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef495688-effa-4ee7-9b81-ccb161f7c3bf\",\"trace_id\":\"26eabbbc-6174-434e-9756-1b84825f03ab\"}\n[2026-05-07 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aac3580d-654c-4490-ab7d-7d91ff1ce423\",\"trace_id\":\"c35dd663-0ae1-4d03-b56d-120bf7292ecb\"}\n[2026-05-07 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aac3580d-654c-4490-ab7d-7d91ff1ce423\",\"trace_id\":\"c35dd663-0ae1-4d03-b56d-120bf7292ecb\"}\n[2026-05-07 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:18] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"de4aa643-9d23-4d24-8c6a-ba951496144e\",\"trace_id\":\"169c2fe6-d32d-45e5-9682-6ae91ce0396f\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e37299b2-0176-4eac-815f-0caabf7af320\",\"trace_id\":\"c47be302-8931-4988-a55d-3560a61143b6\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"de4aa643-9d23-4d24-8c6a-ba951496144e\",\"trace_id\":\"169c2fe6-d32d-45e5-9682-6ae91ce0396f\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:37:36.789343Z\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e37299b2-0176-4eac-815f-0caabf7af320\",\"trace_id\":\"c47be302-8931-4988-a55d-3560a61143b6\"}\n[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ef13206-7c40-464d-a0af-bbaa723080ff\",\"trace_id\":\"fdc7e389-cf4c-4c13-a27d-199959e4691f\"}\n[2026-05-07 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ef13206-7c40-464d-a0af-bbaa723080ff\",\"trace_id\":\"fdc7e389-cf4c-4c13-a27d-199959e4691f\"}\n[2026-05-07 12:36:13] local.NOTICE: Monitoring start {\"correlation_id\":\"87589fd8-76e4-41f4-afe5-f442201ab71c\",\"trace_id\":\"ad59c3de-6d0c-4487-b721-0dfcba13ba89\"}\n[2026-05-07 12:36:13] local.NOTICE: Monitoring end {\"correlation_id\":\"87589fd8-76e4-41f4-afe5-f442201ab71c\",\"trace_id\":\"ad59c3de-6d0c-4487-b721-0dfcba13ba89\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:34:39] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":32728,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"2dc91923-2a7f-4251-9ddd-5663739b2850\",\"trace_id\":\"2bc19bcd-96d0-45d9-b13c-1c1dba7aff9f\"}\n[2026-05-07 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"174592ac-ef13-4e4e-bf6c-471037fb39b9\",\"trace_id\":\"01ae22a0-6724-4f95-bcd6-02b23ee9896e\"}\n[2026-05-07 12:35:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0\",\"trace_id\":\"da1dcdd2-a656-4e5e-8a4b-c714d1175381\"}\n[2026-05-07 12:35:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0\",\"trace_id\":\"da1dcdd2-a656-4e5e-8a4b-c714d1175381\"}\n[2026-05-07 12:35:08] local.NOTICE: Monitoring start {\"correlation_id\":\"cc05b2e5-39a2-4fb1-8859-871c3d987279\",\"trace_id\":\"168cc802-ec5c-4bfd-bfa8-45571e2946cc\"}\n[2026-05-07 12:35:08] local.NOTICE: Monitoring end {\"correlation_id\":\"cc05b2e5-39a2-4fb1-8859-871c3d987279\",\"trace_id\":\"168cc802-ec5c-4bfd-bfa8-45571e2946cc\"}\n[2026-05-07 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8fdc327b-c3dd-4eed-b9a9-00cc263ed461\",\"trace_id\":\"2b164538-6384-413e-a68b-589aabda4af3\"}\n[2026-05-07 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8fdc327b-c3dd-4eed-b9a9-00cc263ed461\",\"trace_id\":\"2b164538-6384-413e-a68b-589aabda4af3\"}\n[2026-05-07 12:35:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2c210df4-febc-4c68-b86e-f5fa6eea2d8e\",\"trace_id\":\"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0\"}\n[2026-05-07 12:35:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef495688-effa-4ee7-9b81-ccb161f7c3bf\",\"trace_id\":\"26eabbbc-6174-434e-9756-1b84825f03ab\"}\n[2026-05-07 12:35:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef495688-effa-4ee7-9b81-ccb161f7c3bf\",\"trace_id\":\"26eabbbc-6174-434e-9756-1b84825f03ab\"}\n[2026-05-07 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aac3580d-654c-4490-ab7d-7d91ff1ce423\",\"trace_id\":\"c35dd663-0ae1-4d03-b56d-120bf7292ecb\"}\n[2026-05-07 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aac3580d-654c-4490-ab7d-7d91ff1ce423\",\"trace_id\":\"c35dd663-0ae1-4d03-b56d-120bf7292ecb\"}\n[2026-05-07 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:18] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4e9986d1-25ed-4e81-868f-e6021368d776\",\"trace_id\":\"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b\"}\n[2026-05-07 12:35:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5e93afe-4aba-4f70-8fb0-859ea99739a7\",\"trace_id\":\"9cf12f9e-4128-4f82-ac7d-faaba7eb3228\"}\n[2026-05-07 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ecd235ab-ce80-4436-9d41-19760ccf43a7\",\"trace_id\":\"b83badb5-9434-41b9-acd6-3ccd099a581c\"}\n[2026-05-07 12:35:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"b04b75c8-edd6-46d5-834b-a276a7fca1c8\",\"trace_id\":\"9e98a255-f6d0-4d37-961a-51f9241c99e4\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"de4aa643-9d23-4d24-8c6a-ba951496144e\",\"trace_id\":\"169c2fe6-d32d-45e5-9682-6ae91ce0396f\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e37299b2-0176-4eac-815f-0caabf7af320\",\"trace_id\":\"c47be302-8931-4988-a55d-3560a61143b6\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"de4aa643-9d23-4d24-8c6a-ba951496144e\",\"trace_id\":\"169c2fe6-d32d-45e5-9682-6ae91ce0396f\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:37:36.789343Z\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e37299b2-0176-4eac-815f-0caabf7af320\",\"trace_id\":\"c47be302-8931-4988-a55d-3560a61143b6\"}\n[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2b2b3086-fa50-4bdf-8140-ea21a3e3edc4\",\"trace_id\":\"7c76b9ca-9e24-4e90-9e5d-0c60119f3b02\"}\n[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:35:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4374f995-b892-49b7-9eaf-d80bcf1eaec2\",\"trace_id\":\"a0f4c391-5090-49ea-8a57-80d06a576d54\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"79eb6ad9-b5e4-435e-95ad-e451fa993e6a\",\"trace_id\":\"929f5d76-3dbd-4a1b-8db3-65234198f9af\"}\n[2026-05-07 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6fa3d42-16e4-4eab-b363-13c6cfb7b814\",\"trace_id\":\"590f9853-355e-49a5-ae3b-99a357cb7f43\"}\n[2026-05-07 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ef13206-7c40-464d-a0af-bbaa723080ff\",\"trace_id\":\"fdc7e389-cf4c-4c13-a27d-199959e4691f\"}\n[2026-05-07 12:36:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ef13206-7c40-464d-a0af-bbaa723080ff\",\"trace_id\":\"fdc7e389-cf4c-4c13-a27d-199959e4691f\"}\n[2026-05-07 12:36:13] local.NOTICE: Monitoring start {\"correlation_id\":\"87589fd8-76e4-41f4-afe5-f442201ab71c\",\"trace_id\":\"ad59c3de-6d0c-4487-b721-0dfcba13ba89\"}\n[2026-05-07 12:36:13] local.NOTICE: Monitoring end {\"correlation_id\":\"87589fd8-76e4-41f4-afe5-f442201ab71c\",\"trace_id\":\"ad59c3de-6d0c-4487-b721-0dfcba13ba89\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"51","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"33","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse Carbon\\Carbon;\nuse Exception;\nuse Generator;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Illuminate\\Support\\Facades\\Cache;\nuse InvalidArgumentException;\nuse Jiminny\\Contracts\\Repositories\\TeamRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\HubspotInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SavePlaybackLinkToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\VerifyTaskExistsInterface;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\HttpNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Participant;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Repositories\\Crm\\FieldRepository;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\ParticipantRepository;\nuse Jiminny\\Services\\Avatar\\ProspectPhotoPathService;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\Hubspot\\Actions\\SyncArchivedProfilesAction;\nuse Jiminny\\Services\\Crm\\Hubspot\\Fields\\ValueNormalizer;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\OpportunitySyncTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncFieldsTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\WriteCrmTrait;\nuse Jiminny\\Services\\Crm\\MatchDomainByEmailInterface;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Services\\Crm\\ResolveCompanyNameByEmailTrait;\nuse Jiminny\\Utils\\PlaybackUrlBuilder;\nuse Sentry;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse Throwable;\nuse UnexpectedValueException;\n\n/**\n * @phpstan-type CrmFieldDefinition array{\n * name: string,\n * label: string,\n * description: string,\n * type: string,\n * fieldType: string,\n * hidden: bool,\n * showCurrencySymbol: bool,\n * options: array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }\n */\nclass Service extends BaseService implements\n HubspotInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n SendSummaryToCrmInterface,\n MatchDomainByEmailInterface,\n SavePlaybackLinkToCrmInterface,\n RemoteEntityManipulationInterface,\n FetchRelatedActivityInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n VerifyTaskExistsInterface\n{\n use ResolveCompanyNameByEmailTrait;\n use SyncCrmEntitiesTrait;\n use WriteCrmTrait;\n use SyncFieldsTrait;\n use OpportunitySyncTrait;\n\n private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;\n\n private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';\n private const int BATCH_UPDATE_LIMIT = 100;\n private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';\n private const int TEN_SECONDLY_ROLLING_LIMIT = 10;\n private const string CALLS_SEARCH_ENDPOINT = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n\n private const string TYPE_NOTE = 'NOTE';\n\n private const string TYPE_MEETING = 'MEETING';\n\n private const string TYPE_CALL = 'CALL';\n\n private const string API_URL = 'https://api.hubapi.com';\n\n // NB: v1 is legacy - v3 is the newest\n private const string ENDPOINT_PIPELINES = '/crm-pipelines/v1/pipelines/';\n private const string PIPELINE_OBJECT_TYPE_DEALS = 'deals';\n\n private const int TASK_VERIFICATION_CACHE_TTL = 86400; // 1 day\n\n /**\n * @var ClientInterface|Client\n */\n protected $client;\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected ProspectPhotoPathService $prospectPhotoPathService;\n\n private SyncFieldAction $syncFieldAction;\n private PayloadBuilder $payloadBuilder;\n private SyncRelatedActivityManager $syncRelatedActivityManager;\n private SyncArchivedProfilesAction $syncArchivedProfilesAction;\n private WebhookSyncBatchProcessor $batchProcessor;\n\n public function __construct(\n Client $client,\n SyncFieldAction $syncFieldAction,\n PayloadBuilder $payloadBuilder,\n ProspectPhotoPathService $prospectPhotoPathService,\n SyncArchivedProfilesAction $syncArchivedProfilesAction,\n WebhookSyncBatchProcessor $batchProcessor,\n ) {\n parent::__construct();\n\n $this->client = $client;\n $this->syncFieldAction = $syncFieldAction;\n $this->prospectPhotoPathService = $prospectPhotoPathService;\n $this->payloadBuilder = $payloadBuilder;\n $this->syncArchivedProfilesAction = $syncArchivedProfilesAction;\n $this->batchProcessor = $batchProcessor;\n $this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [\n 'client' => $this->client,\n ]);\n $this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [\n 'client' => $this->client,\n 'payloadBuilder' => $this->payloadBuilder,\n 'logger' => $this->logger,\n ]);\n $this->crmEntityRepository = app(CrmEntityRepository::class);\n $this->dealFieldsService = app(DealFieldsService::class);\n }\n\n public function getDisplayName(): string\n {\n return 'HubSpot';\n }\n\n protected function getOAuthAccount(User $user): ?SocialAccount\n {\n // In this case, the Account Owner is always the connection for any API operations.\n $owner = $user->team->owner;\n\n return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);\n }\n\n public function getClient(): Client\n {\n /** @var Client */\n return $this->client;\n }\n\n /**\n * Convert raw field data into a format compatible with CRM APIs.\n *\n * @param bool $internal Direction of the conversion.\n * True is pulling from CRM, false normalize before sending to CRM.\n */\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return ValueNormalizer::normalize(\n fieldType: $fieldType,\n fieldValue: $fieldValue,\n isInbound: $internal,\n );\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultFields(string $activityType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n $defaultFields = FieldDefinitions::defaultTaskFields();\n\n // This lazy creates these fields if not already setup.\n foreach ($defaultFields as $defaultField) {\n $fields[] = $this->config->fields()->firstOrCreate($defaultField);\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityField(string $activityType): Field\n {\n /** @var Field $activityField */\n $activityField = $this->config->fields()->where([\n 'crm_provider_id' => 'activityType',\n 'object_type' => $activityType,\n ])->first();\n\n return $activityField;\n }\n\n /**\n * @inheritdoc\n */\n public function getSupportedPlaybookTypes(): array\n {\n return [Playbook::ACTIVITY_TYPE_TASK];\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n // Outcome should always be provided calls/meetings.\n $fieldData = [\n [\n 'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',\n 'object_type' => Field::OBJECT_TASK,\n ],\n ];\n\n foreach ($fieldData as $data) {\n $field = $this->config->fields()->where($data)->first();\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n }\n\n return $fields;\n }\n\n public function getDealInsightsFields(): array\n {\n return FieldDefinitions::dealInsightsFields();\n }\n\n protected function getDefaultFollowupLayoutFields(string $activityType): array\n {\n $fields = [];\n $fieldRepo = app(FieldRepository::class);\n $fieldData = FieldDefinitions::followupFieldsFilter();\n\n foreach ($fieldData as $data) {\n $field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function syncField(Field $field): void\n {\n switch ($field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_CONTACT:\n $crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_OPPORTUNITY:\n $crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_TASK:\n $this->syncSingleTaskField($field);\n\n return;\n default:\n return;\n }\n\n $this->syncFieldAction->execute($field, $crmField->toArray());\n }\n\n /**\n * @param array<array{\n * id:string,\n * label:string,\n * value?:string\n * }> $options\n *\n * @throws CrmException\n *\n * @return FieldData[]\n *\n */\n public function importPicklistValues(\n Field $field,\n array $options = [['id' => '', 'label' => '', 'value' => '']],\n ): array {\n if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {\n // We already have the options, no need to fetch them again\n return $this->importOptions($field, $options);\n }\n\n $options = [];\n\n switch ($field->getObjectType()) {\n case Field::OBJECT_ACCOUNT:\n $options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_CONTACT:\n $options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n // Hubspot has different endpoint for stages\n $options = $this->getClient()->fetchOpportunityFieldOptions($field);\n\n break;\n\n case Field::OBJECT_TASK:\n if ($field->getCrmProviderId() === 'disposition') {\n $options = $this->getClient()->fetchDispositionFieldOptions();\n } elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {\n $options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);\n }\n\n break;\n\n default:\n $this->logger->warning('Invalid object type', [\n 'object_type' => $field->getObjectType(),\n 'field_id' => $field->getId(),\n ]);\n\n throw new CrmException('Invalid object type');\n }\n\n return $this->importOptions($field, $options);\n }\n\n /**\n * @inheritdoc\n */\n public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage\n {\n $missingStage = null;\n\n try {\n // Use the HubSpot API client instead of the SDK crmPipelines() method\n $endpoint = self::getDealsPipelinesEndpoint();\n $pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);\n $pipelines = $pipelinesResponse->data->results;\n } catch (RequestException|BadRequest $exception) {\n throw $exception;\n }\n\n foreach ($pipelines as $pipeline) {\n $stages = [];\n\n // We create a business process to contain the pipeline, and store all stages against it.\n $p = ResponseNormalize::normalizePipeline($pipeline);\n\n // Create/update business process for this pipeline\n $businessProcess = $this->config->businessProcesses()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'type' => BusinessProcess::TYPE_OPPORTUNITY,\n 'is_selectable' => $p['active'],\n ]);\n\n // A record type is really a clone of the business process, used to store which record uses which pipeline.\n // Create/update record type clone\n $this->config->recordTypes()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'is_selectable' => $p['active'],\n 'business_process_id' => $businessProcess->id ?? null,\n ]);\n\n // Stages - fetch all existing stages upfront to avoid N+1 queries\n $existingStages = $this->config->stages()\n ->withTrashed()\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->get()\n ->keyBy('crm_provider_id');\n\n foreach ($p['stages'] as $dealStage) {\n $s = ResponseNormalize::normalizeDealStage($dealStage);\n\n /** @var ?Stage $existingStage */\n $existingStage = $existingStages->get($s['id']);\n\n // Restore soft-deleted stages that are now active in HubSpot\n if ($existingStage?->trashed() && $s['active']) {\n $existingStage->restore();\n }\n\n // Upsert stage (updates soft-deleted records without restoring them)\n $stage = $this->config->stages()->withTrashed()->updateOrCreate([\n 'crm_provider_id' => $s['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($s['label'], 0, 50),\n 'label' => mb_strimwidth($s['label'], 0, 191),\n 'type' => Stage::TYPE_OPPORTUNITY,\n 'sequence' => $s['displayOrder'],\n 'is_selectable' => $s['active'],\n 'probability' => $s['probability'] * 100,\n ]);\n\n if ($missingStageName === $s['id']) {\n $missingStage = $stage;\n }\n\n $stages[] = $stage->id;\n }\n\n $businessProcess->stages()->sync($stages);\n }\n\n return $missingStage;\n }\n\n /**\n * @inheritdoc\n */\n public function syncOrganization(): void\n {\n try {\n $endpoint = 'https://api.hubapi.com/integrations/v1/me';\n $response = $this->client->getInstance()->getClient()->request('get', $endpoint);\n\n $accountData = $response->data;\n $this->config->update(['default_currency' => $accountData->currency]);\n } catch (BadRequest $e) {\n throw new CrmException('Could not sync the organization.', $e->getCode(), $e);\n }\n }\n\n /**\n * @inheritdoc\n *\n * @throws CrmException\n */\n public function syncProfiles(?User $userToSearch = null): ?Profile\n {\n $this->syncArchivedProfilesAction->execute($this->team, $this->client, $this->config);\n\n try {\n $owners = $this->client->getOwners();\n } catch (\\HubSpot\\Client\\Crm\\Owners\\ApiException $e) {\n $this->logger->error('[HubSpot] Could not sync the profiles.', [\n 'team_id' => $this->team->getId(),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new CrmException('Could not sync the profiles.', $e->getCode(), $e);\n }\n\n $profileRepository = app(ProfileRepository::class);\n $teamRepository = app(TeamRepository::class);\n\n foreach ($owners as $owner) {\n if ($owner->getArchived()) {\n // not supposed to fetch archived, but log anyway\n $this->logger->warning('[HubSpot] Found archived owner', [\n 'crm_provider_id' => $owner->getId(),\n 'email' => $owner->getEmail(),\n ]);\n\n continue;\n }\n\n $email = $owner->getEmail();\n if ($email === null) {\n continue;\n }\n\n $user = $teamRepository->findActiveTeamMemberByEmail($this->team, $email);\n\n if (! $user instanceof User) {\n continue;\n }\n\n $profile = $profileRepository->updateOrCreateProfile($user, [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $owner->getId(),\n ]);\n\n if ($userToSearch && $userToSearch->getId() === $user->getId()) {\n return $profile;\n }\n }\n\n return null;\n }\n\n private function generateNameSearchPayload(string $name, int $offset, int $limit): array\n {\n $payload = [\n 'query' => $name,\n 'sorts' => [\n [\n 'propertyName' => 'modifieddate',\n 'direction' => 'DESCENDING',\n ],\n ],\n 'properties' => [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n 'industry',\n 'name',\n 'company',\n ],\n 'limit' => $limit,\n 'after' => $offset,\n ];\n\n $this->logger->debug('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n return $payload;\n }\n\n /**\n * @inheritdoc\n */\n public function find(string $name, array $scopes): array\n {\n $count = $this->limit ?? 20;\n $offset = $this->offset ?? 0;\n\n /** @var array<int, array<string, mixed>> */\n return Cache::remember(\n key: $this->team->getId() . $name . $count . $offset,\n ttl: 300,\n callback: function () use ($name, $offset, $count): array {\n $data = [];\n\n // Use the new V3 API to find contacts based on additional fields.\n foreach (['companies', 'contacts'] as $objectType) {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/' . $objectType . '/search';\n $payload = $this->generateNameSearchPayload($name, $offset, $count);\n $type = $objectType === 'companies' ? 'account' : 'contact';\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, [\n 'json' => $payload,\n ]);\n\n // Build mapped list.\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n\n $objectName = $this->buildContactName($properties);\n\n $record = [\n 'crmId' => $object['id'],\n // Pass crmUrl to the FE, needed for success message in the extension when you log activity.\n 'crmUrl' => $this->generateProviderUrl($object['id'], $type),\n 'name' => $objectName,\n 'prospectType' => $type,\n 'phoneNumbers' => [],\n ];\n\n if ($type === 'account') {\n $record['industry'] = $properties['industry'] ?? null;\n } else {\n $record['title'] = $properties['jobtitle'] ?? null;\n $record['organization'] = $properties['company'] ?? null;\n }\n\n $countryCode = $this->buildContactCountry($properties);\n $parsedNumber = $this->buildContactPhone($countryCode, $properties);\n\n // Add phone number to record.\n if (! empty($parsedNumber['phone'])) {\n $record['phoneNumbers'][] = [\n 'number' => $parsedNumber['phone'],\n 'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),\n 'type' => 'phone',\n ];\n }\n\n // Add mobile phone number to record.\n if (! empty($properties['mobilephone'])) {\n $mobileNumber = phone_e164($countryCode, $properties['mobilephone']);\n if ($mobileNumber !== null) {\n $record['phoneNumbers'][] = [\n 'number' => $mobileNumber,\n 'nationalFormat' => phone_national($countryCode, $mobileNumber),\n 'type' => 'mobile',\n ];\n }\n }\n\n $data[] = $record;\n }\n } catch (BadRequest $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->getUuid(),\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n }\n\n return $data;\n },\n );\n }\n\n\n /**\n * @inheritdoc\n */\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n $ownerId = null;\n\n if ($crmAccountId === null) {\n return $data;\n }\n\n if ($userId) {\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n $ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n $closedStages = $this->getClosedDealStages();\n $payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(\n $this->config,\n $crmAccountId,\n $closedStages,\n );\n\n $results = $this->client->getPaginatedData($payload, 'deals');\n\n foreach ($results['results'] as $object) {\n $properties = $object['properties'];\n\n $amount = null;\n if (empty($properties['amount']) === false) {\n $currency = $properties['deal_currency_code'] ?? $this->config->default_currency;\n\n // Values can contain commas and any junk so strip them.\n $value = (float) preg_replace('/[^\\d.]/', '', $properties['amount']);\n $amount = formatCurrency($value, $currency);\n }\n\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n\n if ($businessProcess === null) {\n // Import it.\n $stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n } else {\n $stage = $businessProcess\n ->stages()\n ->where('crm_provider_id', $properties['dealstage'])\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n if ($stage === null) {\n // Import it.\n $stage = $this->importStages(null, $properties['dealstage']);\n }\n }\n\n $recordType = null;\n if ($businessProcess) {\n $recordType = $businessProcess->recordTypes()->first();\n }\n\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $record = [\n 'crmId' => $object['id'],\n 'name' => $properties['dealname'] ?? 'Unknown Deal',\n 'value' => $amount,\n 'won' => $isWon,\n 'closed' => $isWon || $isLost,\n 'stage' => [\n 'id' => $stage?->getUuid() ?? '',\n 'name' => $stage?->getName() ?? '',\n ],\n ];\n\n if ($recordType) {\n $record += [\n 'recordType' => [\n 'id' => $recordType->id_string,\n 'name' => $recordType->name,\n ],\n ];\n }\n\n if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n }\n\n /**\n * @inheritdoc\n */\n public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array\n {\n $data = [];\n switch ($objectType) {\n case 'contact':\n $hsObject = 'contact';\n\n break;\n case 'account':\n $hsObject = 'company';\n\n break;\n default:\n // This is a hack to prioritise and override a contact/company with a deal.\n if ($opportunityId) {\n $hsObject = 'deal';\n $objectId = $opportunityId;\n } else {\n throw new InvalidArgumentException('Object type not supported.');\n }\n }\n\n $engagementTypes = ['meetings', 'tasks'];\n\n foreach ($engagementTypes as $engagementType) {\n $payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);\n\n $this->logger->info('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n $engagements = $this->client->getPaginatedData($payload, $engagementType);\n\n foreach ($engagements['results'] as $engagement) {\n if ($engagementType == 'meetings') {\n $title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';\n } elseif ($engagementType == 'tasks') {\n $title = $engagement['properties']['hs_task_subject'];\n } else {\n $title = 'Scheduled meeting';\n }\n\n $data[] = [\n 'crmId' => $engagement['id'],\n 'subject' => $title,\n 'due' => $engagement['properties']['hs_timestamp'],\n 'type' => $engagement['properties']['hs_activity_type'] ?? null,\n ];\n }\n }\n\n usort($data, function ($item1, $item2) {\n return $item2['due'] <=> $item1['due'];\n });\n\n return $data;\n }\n\n /**\n * Try to find CRM Objects using email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchExactlyByEmail(string $email, ?int $userId = null): ?array\n {\n $contactProperties = [\n 'email',\n// 'firstname',\n// 'lastname',\n// 'country',\n// 'phone',\n// 'mobilephone',\n// 'jobtitle',\n// 'hubspot_owner_id',\n// 'associatedcompanyid',\n// 'photo',\n ];\n $contact = null;\n $account = null;\n\n try {\n $hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);\n return null;\n\n if ($hsContact) {\n $contact = $this->importContact($hsContact);\n $account = $contact->account;\n }\n\n $data = $this->convertCrmData($contact, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n } catch (BadRequest $e) {\n $this->logger->warning('[HubSpot] Search failed', [\n 'team_id' => $this->team->getId(),\n 'search_identifier' => $email,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return null;\n }\n\n public function getDomain(string $email): ?string\n {\n return $this->getDomainFromEmail($email);\n }\n\n /**\n * Try to find CRM objects using domain name of the email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByDomain(string $domain, ?int $userId = null): ?array\n {\n $companyName = $domain;\n\n // Try to find a company matching their email domain.\n $companyProperties = [\n 'country',\n 'phone',\n 'name',\n 'hs_avatar_filemanager_key',\n 'industry',\n 'hubspot_owner_id',\n 'domain',\n ];\n\n try {\n $hsAccounts = $this->client\n ->getInstance()\n ->companies()\n ->searchByDomain($companyName, $companyProperties);\n } catch (Throwable $e) {\n $this->logger->info('[HubSpot] Search failed', [\n 'error' => $e->getMessage(),\n 'domain' => $domain,\n ]);\n\n return null;\n }\n\n $account = null;\n // If there are multiple accounts, don't guess, we'll ask later.\n if (\\count($hsAccounts->data->results) === 1) {\n // Persist this remote object.\n $account = $this->syncAccount($hsAccounts->data->results[0]->companyId);\n }\n\n $data = $this->convertCrmData(null, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n }\n\n /**\n * @return array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array\n {\n $countryCode = null;\n if ($contact && $contact->country_code) {\n $countryCode = $contact->country_code;\n } elseif ($account && $account->country_code) {\n $countryCode = $account->country_code;\n }\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact ? $contact->crm_provider_id : null,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n // If there are multiple opportunities, don't guess, we'll ask later.\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n protected function getCacheKey(string $object, ?int $userId = null): ?string\n {\n $key = $this->team->getId() . $object;\n $keySuffix = $this->getOwnerKeySuffix($userId);\n\n return $key . $keySuffix;\n }\n\n private function getOwnerKeySuffix(?int $userId = null): string\n {\n return $userId === null ? '' : (string) $userId;\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n *}\n */\n public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array\n {\n if (str_contains($phone, '**')) {\n return null;\n }\n\n // trim all whitespaces if present so the lookup doesn't fail\n $phone = str_replace(' ', '', $phone);\n\n // Check if the user is internal.\n if ($this->isPhoneNumberOfTeamMember($phone)) {\n return null;\n }\n\n $response = $this->searchForPhoneNumber($phone);\n if (empty($response)) {\n return null;\n }\n\n // This would ideally importContact instead but the response type differs.\n $contact = $this->findAndSyncContact($response['results'][0]['id']);\n if (! $contact instanceof Contact) {\n return null;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account?->crm_provider_id,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n\n try {\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n } catch (Exception $e) {\n $this->logger->debug('[HubSpot] Opportunity failed to sync.', [\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n private function isPhoneNumberOfTeamMember(string $phone): bool\n {\n $teamRepository = app(TeamRepository::class);\n $user = $teamRepository->findTeamMemberByPhone($this->team, $phone);\n\n if ($user instanceof User) {\n return true;\n }\n\n return false;\n }\n\n private function findAndSyncContact(string $crmId): ?Contact\n {\n try {\n return $this->syncContact($crmId);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'reason' => $exception->getMessage(),\n ]);\n\n return null;\n }\n }\n\n private function hasResults(array $response): bool\n {\n return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;\n }\n\n private function searchForPhoneNumber(string $phone): array\n {\n // Normalizes the provided phone number for the API search.\n $normalizedPhone = $this->normalizePhoneNumber($phone);\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);\n\n $this->logger->info('[HubSpot] Phone match search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);\n\n if (! $this->hasResults($response)) {\n $nationalPhone = preg_replace('/\\D/', '', phone_national(null, $phone));\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);\n\n $this->logger->info('[HubSpot] Phone match national number search triggered', [\n 'phone' => $phone,\n 'nationalPhone' => $nationalPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n if (! $this->hasResults($response)) {\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);\n\n $this->logger->info('[HubSpot] Phone match alternative search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n return $this->hasResults($response) ? $response : [];\n }\n\n private function handlePhoneSearchRequest(string $phone, array $payload): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/contacts/search';\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n $endpoint,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'phone' => $phone,\n 'reason' => $exception->getMessage(),\n ]);\n\n return [];\n }\n\n $this->logger->info('[HubSpot] Phone match completed', [\n 'phone' => $phone,\n 'response' => $response,\n ]);\n\n return $response->toArray();\n }\n\n private function normalizePhoneNumber(string $phone): string\n {\n return ltrim(phone_e164(null, $phone), '+0');\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByName(string $name, ?int $userId = null): ?array\n {\n // Don't waste time searching for single character strings.\n if (\\strlen($name) <= 1) {\n return null;\n }\n\n $cacheKey = $this->getCacheKey($name, $userId);\n\n $result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {\n $payload = $this->payloadBuilder->generateSearchContactsByNamePayload(\n $name,\n $this->getContactFields()\n );\n\n $hsContacts = $this->client->getPaginatedData($payload, 'contact');\n if (empty($hsContacts['results'])) {\n return false;\n }\n\n $contact = $this->importContact($hsContacts['results'][0]);\n if ($contact === null) {\n return false;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n });\n\n return is_array($result) ? $result : null;\n }\n\n\n private function convertActivityAssociations(Activity $activity): array\n {\n return [\n 'contactIds' => $this->getParticipantsIds($activity),\n 'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],\n 'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],\n 'ownerIds' => [],\n ];\n }\n\n private function getParticipantsIds(Activity $activity): array\n {\n $attendees = [];\n\n $participantRepository = app(ParticipantRepository::class);\n $participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);\n foreach ($participants as $participant) {\n if ($participant->user_id || $participant->isCoach()) {\n continue;\n }\n\n $contact = $participant->contact()->first();\n if ($contact && $contact->crm_provider_id) {\n $attendees[] = $contact->crm_provider_id;\n } else {\n if (! empty($participant->name)) {\n $attendeeData = $this->fetchMissingAttendeeInfo($participant);\n }\n if (! empty($attendeeData['id'])) {\n $attendees[] = $attendeeData['id'];\n }\n }\n }\n\n if ($activity->hasContact()) {\n $attendees[] = $activity->contact->crm_provider_id;\n }\n\n return array_unique($attendees);\n }\n\n private function fetchMissingAttendeeInfo(Participant $participant): array\n {\n // Check if we need to look inside an account context.\n $activity = $participant->getActivity();\n $companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;\n\n // First check the local data.\n /** @var Contact[] $contacts */\n $contacts = $this->team->contacts()\n ->with('account')\n ->where('name', $participant->name)\n ->whereNotNull('email')\n ->get();\n\n foreach ($contacts as $contact) {\n // If we have a company in scope, check the contact is associated to it.\n if (\n $companyId !== null\n && ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)\n ) {\n continue;\n }\n\n return [\n 'id' => $contact->crm_provider_id,\n 'email' => $contact->email,\n ];\n }\n\n $payload = $this->generateNameSearchPayload($participant->name, 0, 20);\n\n try {\n $response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);\n\n // TODO add some logic to choose the most suitable contact if multiple\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n if (empty($object['properties']) === false) {\n // Check the company matches the contact.\n // Todo: Move this check inside the API search.\n if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {\n continue;\n }\n\n return [\n 'id' => $object['id'],\n 'email' => $properties['email'],\n ];\n }\n }\n } catch (Exception $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->id_string,\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [];\n }\n\n /**\n * Store transcripts as note engagement.\n *\n * @throws Exception\n */\n public function createTranscriptNotes(Activity $activity): void\n {\n // For HS no need to check if Crm profile - Log Notes field is enabled\n // We only check if store_transcript toggle is enabled on crm profile.\n $engagement = [\n 'active' => true,\n 'ownerId' => $this->profile->crm_provider_id,\n 'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,\n 'type' => 'NOTE',\n ];\n\n // Generate activity transcription.\n $transcriptionData = $this->generateTranscription($activity);\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);\n\n $metadata = [\n 'body' => $transcripts,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsEngagement = $this->client\n ->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $noteId = $hsEngagement->data->engagement->id;\n\n // Store crm logged id in transcription.\n $transcription = $activity->getTranscription();\n $transcription->crm_activity_id = $noteId;\n $transcription->save();\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $payload = [\n 'properties' => $data,\n ];\n\n try {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n $this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);\n\n break;\n case FieldData::OBJECT_CONTACT:\n $this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_ACCOUNT:\n $this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_TASK:\n // Endpoint for Engagements not ready\n $engagements = [\n 'type' => 'TASK',\n ];\n $metadata = $data;\n $this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $objectId],\n $metadata,\n );\n\n break;\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $apiException) {\n $errorMessage = $apiException->getMessage();\n if ($apiException->getResponseBody()) {\n $responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);\n $errorMessage = $responseBody['message'] ?? $apiException->getMessage();\n }\n\n $this->logger->error(\n '[HubSpot] Update record failed',\n [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'payload' => $payload,\n 'reason' => $errorMessage,\n 'team' => $this->team->getUuid(),\n ]\n );\n\n throw new CrmException($errorMessage);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n return $this->client->getInstance()->deals()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_CONTACT:\n return $this->client->getInstance()->contacts()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_ACCOUNT:\n return $this->client->getInstance()->companies()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_TASK:\n return $this->client->getInstance()->engagements()->get($objectId)->toArray();\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n }\n\n /**\n * @throws BadRequest\n * @throws CrmException\n */\n public function updateStage($crmObject, Stage $stage): void\n {\n $payload = [\n 'properties' => [\n [\n 'name' => 'dealstage',\n 'value' => $stage->crm_provider_id,\n ],\n ],\n ];\n\n try {\n $this->client->getInstance()->deals()->update($crmObject->crm_provider_id, $payload);\n } catch (BadRequest $badRequest) {\n if ($badRequest->getCode() === 403) {\n throw new CrmException(\n \"Sorry, you don't have permission to update this stage.\",\n $badRequest->getCode(),\n $badRequest,\n );\n }\n\n $this->logger->warning('[HubSpot] Stage update failed', [\n 'dealId' => $crmObject->crm_provider_id,\n 'payload' => $payload,\n 'message' => $badRequest->getMessage(),\n ]);\n\n throw $badRequest;\n }\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n $url = null;\n $baseUrl = 'https://app.hubspot.com/contacts/' . $this->config->crm_provider_id . '/';\n\n switch ($objectType) {\n case 'account':\n $url = $baseUrl . 'company/' . $providerId;\n\n break;\n\n case 'contact':\n $url = $baseUrl . 'contact/' . $providerId;\n\n break;\n\n case 'opportunity':\n $url = $baseUrl . 'deal/' . $providerId;\n\n break;\n\n case 'task':\n case 'activity':\n return null;\n\n // This should not be deep-linked as per JMNY-3934.\n //$url = $baseUrl.'tasks/list/view/all/?taskId='.$providerId;\n break;\n }\n\n return $url;\n }\n\n public function searchCalls(Carbon $from, Carbon $to, string $activityProvider): array\n {\n $this->logger->info('[HubSpot] Search calls', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $calls = [];\n $page = 1;\n\n do {\n try {\n $payload = $this->payloadBuilder->generateGetCallsPayload($from, $to, $activityProvider, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n $calls = array_merge($calls, $responseResults);\n $page++;\n } while (! empty($responseResults));\n\n return $calls;\n }\n\n public function searchCallsForPeriodByPage(Carbon $from, Carbon $to, int $page, bool $retry = true)\n {\n try {\n $payload = $this->payloadBuilder->generateSearchCallsByPeriodPayload($from, $to, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls for period failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallsForPeriodByPage($from, $to, $page, false);\n }\n $response = null;\n }\n\n return $response;\n }\n\n public function searchCallsForPeriod(Carbon $from, Carbon $to): Generator\n {\n $this->logger->info('[HubSpot] Search calls for period', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $page = 1;\n\n do {\n $response = $this->searchCallsForPeriodByPage($from, $to, $page);\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n\n $associationContacts = $this->getAssociationDataForCollection($responseResults, 'calls', 'contacts');\n $associationCompanies = $this->getAssociationDataForCollection($responseResults, 'calls', 'companies');\n $associationDeals = $this->getAssociationDataForCollection($responseResults, 'calls', 'deals');\n\n foreach ($responseResults as $call) {\n $call['associations'] = [\n 'contacts' => $this->importAssociationData($call, $associationContacts),\n 'companies' => $this->importAssociationData($call, $associationCompanies),\n 'deals' => $this->importAssociationData($call, $associationDeals),\n ];\n\n yield $call;\n }\n $page++;\n } while (! empty($responseResults));\n }\n\n public function getCall(string $callId): array\n {\n $this->logger->info('[HubSpot] Get call', [\n 'call_id' => $callId,\n ]);\n\n $searchAttributes = $this->payloadBuilder->getSearchCallAttributes();\n $endpoint = sprintf(\n 'https://api.hubapi.com/crm/v3/objects/calls/%s',\n $callId,\n );\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'GET',\n $endpoint,\n [],\n sprintf(\n 'properties=%s&associations=contacts,companies,deals',\n implode(',', $searchAttributes),\n ),\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Get call failed', [\n 'call_id' => $callId,\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n return empty($response) ? [] : $response->toArray();\n }\n\n public function bulkAddPlaybackURLToDescription(array $crmUpdateData): array\n {\n $crmUpdateBatches = array_chunk($crmUpdateData, self::BATCH_UPDATE_LIMIT);\n\n $updatedCrmIds = [];\n\n foreach ($crmUpdateBatches as $crmBatch) {\n $payload = $this->payloadBuilder->generatePlaybackAddUrlBatchPayload($crmBatch);\n $updateSuccess = $this->bulkAddPlaybackURLToDescriptionRequest($payload);\n if ($updateSuccess) {\n $updatedCrmIds = array_merge($updatedCrmIds, array_column($crmBatch, 'crm_id'));\n }\n }\n\n return $updatedCrmIds;\n }\n\n private function bulkAddPlaybackURLToDescriptionRequest(array $payload, bool $retry = true): bool\n {\n try {\n $this->client->getNewInstance()->crm()->objects()->batchApi()->update('calls', $payload);\n\n return true;\n } catch (\\HubSpot\\Client\\Crm\\Objects\\ApiException $e) {\n $response = json_decode($e->getResponseBody(), true);\n $retryAfter =\n isset($response['policyName'])\n && $response['policyName'] == self::TEN_SECONDLY_ROLLING_POLICY\n ? self::TEN_SECONDLY_ROLLING_LIMIT\n : 1;\n } catch (Exception $e) {\n $retryAfter = 1;\n }\n\n $this->logger->warning('[HubSpot] Bulk add playback url to CRM failed', [\n 'reason' => $e->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep($retryAfter);\n\n return $this->bulkAddPlaybackURLToDescriptionRequest($payload, false);\n }\n\n return false;\n }\n\n /**\n * Sometimes we have secondly rate limit error, then retry request after 1 second\n */\n public function searchCallByRecordingURLToken(string $playbackURLToken, bool $retry = true): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n $payload = $this->payloadBuilder->generateSearchCallByTokenPayload($playbackURLToken);\n\n $this->logger->info('[HubSpot] CRM Search by playback URL token requested', [\n 'request' => $payload,\n ]);\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, ['json' => ($payload)]);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search by playback URL token failed', [\n 'playbackURLToken' => $playbackURLToken,\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallByRecordingURLToken($playbackURLToken, false);\n }\n\n return [];\n }\n\n return empty($response['results']) ? [] : $response['results'][0];\n }\n\n /**\n * Generate transcription for the activity.\n */\n private function generateTranscription(Activity $activity): string\n {\n if (! $this->config->store_transcript) {\n // If sending transcription to activity toggle is disabled\n return '';\n }\n\n $transcriptionSegments = $this->transcriptionService->findTranscriptionByActivity($activity);\n\n if ($transcriptionSegments->isEmpty()) {\n return '';\n }\n\n $transcription = sprintf(\n '<p><strong>Transcript for %s</strong></p><p></p>',\n $activity->title ?? $activity->activity_title,\n );\n\n $roomOwnerParticipant = $activity->findParticipantRoomOwner();\n $roomOwnerParticipantId = $roomOwnerParticipant !== null\n ? $roomOwnerParticipant->getId()\n : null;\n\n\n $transcription .= $transcriptionSegments\n ->map(static function (array $transcriptionSegment) use ($roomOwnerParticipantId): string {\n $isOrganiser = $roomOwnerParticipantId === $transcriptionSegment['participantId']\n && $roomOwnerParticipantId !== null;\n $transcriptColor = $isOrganiser ? '#000000' : '#f0415a';\n\n return sprintf(\n '<span style=\"color: %s;\">%s | </span>%s',\n $transcriptColor,\n $transcriptionSegment['formattedStartsAt'],\n $transcriptionSegment['transcript'],\n );\n })\n ->implode('<br />');\n\n return $transcription;\n }\n\n /**\n * @param array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }> $options\n *\n * @return FieldData[]\n */\n private function importOptions(Field $field, array $options): array\n {\n $fieldValues = [];\n $values = [];\n $sequence = 0;\n\n foreach ($options as $option) {\n $values[] = [\n 'value' => $option['value'] ?? $option['id'],\n 'label' => substr($option['label'], 0, 255),\n 'sequence' => $sequence++,\n ];\n }\n\n $fieldsToPurge = $field->values()->get()->pluck('value')->toArray();\n\n foreach ($values as $value) {\n $value['value'] = substr($value['value'], 0, 255);\n $fieldValues[] = $field->values()->updateOrCreate([\n 'value' => $value['value'],\n ], $value);\n\n // Remove this value from the ones we are going to purge.\n if (($key = array_search($value['value'], $fieldsToPurge, false)) !== false) {\n unset($fieldsToPurge[$key]);\n }\n }\n\n // Delete the old values that are no longer used.\n $field->values()->whereIn('value', $fieldsToPurge)->delete();\n\n return $fieldValues;\n }\n\n public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null || $objectId === null) {\n return null;\n }\n\n /** @var User $user */\n $user = $activity->getUser();\n\n $profile = $this->assignCrmOwner($user, $activity);\n if (! $profile instanceof Profile) {\n return null;\n }\n\n $timestamp = Carbon::now($user->getTimezone())->getTimestamp() * 1000;\n $engagement = [\n 'active' => true,\n 'ownerId' => $profile->getAttribute('crm_provider_id'),\n 'timestamp' => $timestamp,\n 'type' => 'NOTE',\n ];\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $body = mb_strimwidth($body, 0, self::ENGAGEMENT_BODY_MAX_LENGTH);\n $metadata = [\n 'body' => $body,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsActivityId = $this->client->createNote(\n body: $body,\n ownerId: $profile->getCrmProviderId(),\n timestamp: $timestamp,\n objectId: $objectId,\n noteObject: $noteObject,\n );\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $this->logger->info('[HubSpot] Saving Transcription Summary as Note', [\n 'activity' => $activity->getUuid(),\n 'crmActivity' => $hsActivityId,\n ]);\n\n return $hsActivityId;\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function attachSummaryToActivity(ActivityContract $activity, string $summaryTitle, string $summaryContents): bool\n {\n $this->logger->info('[HubSpot] Attaching summary to activity', [\n 'activity' => $activity->getUuid(),\n 'summary_content' => $summaryContents,\n ]);\n\n if (! $activity instanceof Activity) {\n throw new InvalidArgumentException('Expected instance of Activity');\n }\n\n $summary = '<p><strong>' . $summaryTitle . '</strong></p>';\n $summary .= '<p>' . $summaryContents . '</p>';\n $metadata = $this->buildMetadataForSummaryUpdate($activity, $summary);\n\n try {\n $type = $this->matchActivityEngagementType($activity);\n $engagement = ['type' => $type];\n\n $this->client->updateEngagement($activity->getCrmProviderId(), $engagement, $metadata);\n } catch (Exception $e) {\n $this->logger->warning('[HubSpot] Update summary failed', [\n 'activity' => $activity->getUuid(),\n 'reason' => $e->getMessage(),\n ]);\n\n return false;\n }\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $activity->getCrmProviderId()],\n $metadata,\n );\n\n return true;\n }\n\n private function buildMetadataForSummaryUpdate(Activity $activity, string $summary): array\n {\n $descriptionField = $activity->getType() === Activity::TYPE_CONFERENCE ? 'internalMeetingNotes' : 'body';\n $engagement = $this->client->getEngagementData($activity->getCrmProviderId());\n // Meeting without internalMeetingNotes might mean it just does not have any notes;\n $description = $engagement['metadata'][$descriptionField] ?? null;\n\n if (empty($description)) {\n $data = $summary;\n } else {\n // avoid playbook url link to Jiminny being sent twice in the activity description\n $targetUrl = PlaybackUrlBuilder::build($activity);\n\n if (str_contains($description, $targetUrl)) {\n $jiminnyUrl = '<p><a href=\"' . $targetUrl . '\" title=\"Play at Jiminny\">Play at Jiminny</a></p>';\n $summary = str_replace($jiminnyUrl, '', $summary);\n\n $this->logger->info('[HubSpot] Summary modified', [\n 'activity' => $activity->getUuid(),\n 'target_url' => $jiminnyUrl,\n 'modified_summary_content' => $summary,\n ]);\n }\n\n $data = $description . '<p></p>' . $summary;\n }\n\n return [\n $descriptionField => $data,\n ];\n }\n\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n return $this->syncRelatedActivityManager->fetchAndAssociateRelatedActivity($activity);\n }\n\n public function fetchRelatedActivity(Activity $activity): array\n {\n return [];\n }\n\n public function getDealsInBulk(array $dealIds): array\n {\n $payload = $this->payloadBuilder->getDealsInBulkPayload($dealIds);\n\n return $this->client->getPaginatedData($payload, 'deals');\n }\n\n /**\n * Extract deal IDs from HubSpot search response.\n *\n * @param array $hubspotResponse The raw HubSpot search API response.\n * @param bool $includeArchived Whether to include archived deals (default: false).\n *\n * @return string[] Array of deal IDs as strings.\n */\n public function extractDealIds(array $hubspotResponse, bool $includeArchived = false): array\n {\n if (empty($hubspotResponse['results'])) {\n return [];\n }\n\n return array_values(\n array_map(\n fn ($deal) => $deal['id'],\n array_filter(\n $hubspotResponse['results'],\n fn ($deal) => $includeArchived || empty($deal['archived'])\n )\n )\n );\n }\n\n public function matchActivityEngagementType(Activity $activity): string\n {\n return match ($activity->getType()) {\n Activity::TYPE_CONFERENCE => self::TYPE_MEETING,\n Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND => self::TYPE_CALL,\n default => self::TYPE_NOTE,\n };\n }\n\n private function assignCrmOwner(User $user, ActivityContract $activity): ?Profile\n {\n $profile = $user->getProfile();\n if ($profile instanceof Profile) {\n return $profile;\n }\n\n $this->logger->info('[HubSpot] Unable to save summary. No profile', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n private static function getDealsPipelinesEndpoint(): string\n {\n return self::API_URL . self::ENDPOINT_PIPELINES . self::PIPELINE_OBJECT_TYPE_DEALS;\n }\n\n public function verifyTaskExists(Activity $activity): bool\n {\n $crmProviderId = $activity->getCrmProviderId();\n $cacheKey = \"crm_task_exists:{$this->config->getId()}:$crmProviderId\";\n\n return Cache::remember($cacheKey, self::TASK_VERIFICATION_CACHE_TTL, function () use ($crmProviderId) {\n try {\n $engagement = $this->client->getEngagementData($crmProviderId);\n\n return ! empty($engagement);\n } catch (HttpNotFoundException|BadRequest) {\n // Engagement not found in CRM - this is expected and permanent\n $this->logger->info('[Hubspot] Engagement not found during verification', [\n 'engagement_id' => $crmProviderId,\n 'config_id' => $this->config->getId(),\n ]);\n\n return false;\n }\n // Let other exceptions (network errors, rate limits, etc.) bubble up for retry\n });\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse Carbon\\Carbon;\nuse Exception;\nuse Generator;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Illuminate\\Support\\Facades\\Cache;\nuse InvalidArgumentException;\nuse Jiminny\\Contracts\\Repositories\\TeamRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\HubspotInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SavePlaybackLinkToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\VerifyTaskExistsInterface;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\HttpNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Participant;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Repositories\\Crm\\FieldRepository;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\ParticipantRepository;\nuse Jiminny\\Services\\Avatar\\ProspectPhotoPathService;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\Hubspot\\Actions\\SyncArchivedProfilesAction;\nuse Jiminny\\Services\\Crm\\Hubspot\\Fields\\ValueNormalizer;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\OpportunitySyncTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncFieldsTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\WriteCrmTrait;\nuse Jiminny\\Services\\Crm\\MatchDomainByEmailInterface;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Services\\Crm\\ResolveCompanyNameByEmailTrait;\nuse Jiminny\\Utils\\PlaybackUrlBuilder;\nuse Sentry;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse Throwable;\nuse UnexpectedValueException;\n\n/**\n * @phpstan-type CrmFieldDefinition array{\n * name: string,\n * label: string,\n * description: string,\n * type: string,\n * fieldType: string,\n * hidden: bool,\n * showCurrencySymbol: bool,\n * options: array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }\n */\nclass Service extends BaseService implements\n HubspotInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n SendSummaryToCrmInterface,\n MatchDomainByEmailInterface,\n SavePlaybackLinkToCrmInterface,\n RemoteEntityManipulationInterface,\n FetchRelatedActivityInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n VerifyTaskExistsInterface\n{\n use ResolveCompanyNameByEmailTrait;\n use SyncCrmEntitiesTrait;\n use WriteCrmTrait;\n use SyncFieldsTrait;\n use OpportunitySyncTrait;\n\n private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;\n\n private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';\n private const int BATCH_UPDATE_LIMIT = 100;\n private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';\n private const int TEN_SECONDLY_ROLLING_LIMIT = 10;\n private const string CALLS_SEARCH_ENDPOINT = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n\n private const string TYPE_NOTE = 'NOTE';\n\n private const string TYPE_MEETING = 'MEETING';\n\n private const string TYPE_CALL = 'CALL';\n\n private const string API_URL = 'https://api.hubapi.com';\n\n // NB: v1 is legacy - v3 is the newest\n private const string ENDPOINT_PIPELINES = '/crm-pipelines/v1/pipelines/';\n private const string PIPELINE_OBJECT_TYPE_DEALS = 'deals';\n\n private const int TASK_VERIFICATION_CACHE_TTL = 86400; // 1 day\n\n /**\n * @var ClientInterface|Client\n */\n protected $client;\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected ProspectPhotoPathService $prospectPhotoPathService;\n\n private SyncFieldAction $syncFieldAction;\n private PayloadBuilder $payloadBuilder;\n private SyncRelatedActivityManager $syncRelatedActivityManager;\n private SyncArchivedProfilesAction $syncArchivedProfilesAction;\n private WebhookSyncBatchProcessor $batchProcessor;\n\n public function __construct(\n Client $client,\n SyncFieldAction $syncFieldAction,\n PayloadBuilder $payloadBuilder,\n ProspectPhotoPathService $prospectPhotoPathService,\n SyncArchivedProfilesAction $syncArchivedProfilesAction,\n WebhookSyncBatchProcessor $batchProcessor,\n ) {\n parent::__construct();\n\n $this->client = $client;\n $this->syncFieldAction = $syncFieldAction;\n $this->prospectPhotoPathService = $prospectPhotoPathService;\n $this->payloadBuilder = $payloadBuilder;\n $this->syncArchivedProfilesAction = $syncArchivedProfilesAction;\n $this->batchProcessor = $batchProcessor;\n $this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [\n 'client' => $this->client,\n ]);\n $this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [\n 'client' => $this->client,\n 'payloadBuilder' => $this->payloadBuilder,\n 'logger' => $this->logger,\n ]);\n $this->crmEntityRepository = app(CrmEntityRepository::class);\n $this->dealFieldsService = app(DealFieldsService::class);\n }\n\n public function getDisplayName(): string\n {\n return 'HubSpot';\n }\n\n protected function getOAuthAccount(User $user): ?SocialAccount\n {\n // In this case, the Account Owner is always the connection for any API operations.\n $owner = $user->team->owner;\n\n return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);\n }\n\n public function getClient(): Client\n {\n /** @var Client */\n return $this->client;\n }\n\n /**\n * Convert raw field data into a format compatible with CRM APIs.\n *\n * @param bool $internal Direction of the conversion.\n * True is pulling from CRM, false normalize before sending to CRM.\n */\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return ValueNormalizer::normalize(\n fieldType: $fieldType,\n fieldValue: $fieldValue,\n isInbound: $internal,\n );\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultFields(string $activityType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n $defaultFields = FieldDefinitions::defaultTaskFields();\n\n // This lazy creates these fields if not already setup.\n foreach ($defaultFields as $defaultField) {\n $fields[] = $this->config->fields()->firstOrCreate($defaultField);\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityField(string $activityType): Field\n {\n /** @var Field $activityField */\n $activityField = $this->config->fields()->where([\n 'crm_provider_id' => 'activityType',\n 'object_type' => $activityType,\n ])->first();\n\n return $activityField;\n }\n\n /**\n * @inheritdoc\n */\n public function getSupportedPlaybookTypes(): array\n {\n return [Playbook::ACTIVITY_TYPE_TASK];\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n // Outcome should always be provided calls/meetings.\n $fieldData = [\n [\n 'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',\n 'object_type' => Field::OBJECT_TASK,\n ],\n ];\n\n foreach ($fieldData as $data) {\n $field = $this->config->fields()->where($data)->first();\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n }\n\n return $fields;\n }\n\n public function getDealInsightsFields(): array\n {\n return FieldDefinitions::dealInsightsFields();\n }\n\n protected function getDefaultFollowupLayoutFields(string $activityType): array\n {\n $fields = [];\n $fieldRepo = app(FieldRepository::class);\n $fieldData = FieldDefinitions::followupFieldsFilter();\n\n foreach ($fieldData as $data) {\n $field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function syncField(Field $field): void\n {\n switch ($field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_CONTACT:\n $crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_OPPORTUNITY:\n $crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_TASK:\n $this->syncSingleTaskField($field);\n\n return;\n default:\n return;\n }\n\n $this->syncFieldAction->execute($field, $crmField->toArray());\n }\n\n /**\n * @param array<array{\n * id:string,\n * label:string,\n * value?:string\n * }> $options\n *\n * @throws CrmException\n *\n * @return FieldData[]\n *\n */\n public function importPicklistValues(\n Field $field,\n array $options = [['id' => '', 'label' => '', 'value' => '']],\n ): array {\n if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {\n // We already have the options, no need to fetch them again\n return $this->importOptions($field, $options);\n }\n\n $options = [];\n\n switch ($field->getObjectType()) {\n case Field::OBJECT_ACCOUNT:\n $options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_CONTACT:\n $options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n // Hubspot has different endpoint for stages\n $options = $this->getClient()->fetchOpportunityFieldOptions($field);\n\n break;\n\n case Field::OBJECT_TASK:\n if ($field->getCrmProviderId() === 'disposition') {\n $options = $this->getClient()->fetchDispositionFieldOptions();\n } elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {\n $options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);\n }\n\n break;\n\n default:\n $this->logger->warning('Invalid object type', [\n 'object_type' => $field->getObjectType(),\n 'field_id' => $field->getId(),\n ]);\n\n throw new CrmException('Invalid object type');\n }\n\n return $this->importOptions($field, $options);\n }\n\n /**\n * @inheritdoc\n */\n public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage\n {\n $missingStage = null;\n\n try {\n // Use the HubSpot API client instead of the SDK crmPipelines() method\n $endpoint = self::getDealsPipelinesEndpoint();\n $pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);\n $pipelines = $pipelinesResponse->data->results;\n } catch (RequestException|BadRequest $exception) {\n throw $exception;\n }\n\n foreach ($pipelines as $pipeline) {\n $stages = [];\n\n // We create a business process to contain the pipeline, and store all stages against it.\n $p = ResponseNormalize::normalizePipeline($pipeline);\n\n // Create/update business process for this pipeline\n $businessProcess = $this->config->businessProcesses()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'type' => BusinessProcess::TYPE_OPPORTUNITY,\n 'is_selectable' => $p['active'],\n ]);\n\n // A record type is really a clone of the business process, used to store which record uses which pipeline.\n // Create/update record type clone\n $this->config->recordTypes()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'is_selectable' => $p['active'],\n 'business_process_id' => $businessProcess->id ?? null,\n ]);\n\n // Stages - fetch all existing stages upfront to avoid N+1 queries\n $existingStages = $this->config->stages()\n ->withTrashed()\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->get()\n ->keyBy('crm_provider_id');\n\n foreach ($p['stages'] as $dealStage) {\n $s = ResponseNormalize::normalizeDealStage($dealStage);\n\n /** @var ?Stage $existingStage */\n $existingStage = $existingStages->get($s['id']);\n\n // Restore soft-deleted stages that are now active in HubSpot\n if ($existingStage?->trashed() && $s['active']) {\n $existingStage->restore();\n }\n\n // Upsert stage (updates soft-deleted records without restoring them)\n $stage = $this->config->stages()->withTrashed()->updateOrCreate([\n 'crm_provider_id' => $s['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($s['label'], 0, 50),\n 'label' => mb_strimwidth($s['label'], 0, 191),\n 'type' => Stage::TYPE_OPPORTUNITY,\n 'sequence' => $s['displayOrder'],\n 'is_selectable' => $s['active'],\n 'probability' => $s['probability'] * 100,\n ]);\n\n if ($missingStageName === $s['id']) {\n $missingStage = $stage;\n }\n\n $stages[] = $stage->id;\n }\n\n $businessProcess->stages()->sync($stages);\n }\n\n return $missingStage;\n }\n\n /**\n * @inheritdoc\n */\n public function syncOrganization(): void\n {\n try {\n $endpoint = 'https://api.hubapi.com/integrations/v1/me';\n $response = $this->client->getInstance()->getClient()->request('get', $endpoint);\n\n $accountData = $response->data;\n $this->config->update(['default_currency' => $accountData->currency]);\n } catch (BadRequest $e) {\n throw new CrmException('Could not sync the organization.', $e->getCode(), $e);\n }\n }\n\n /**\n * @inheritdoc\n *\n * @throws CrmException\n */\n public function syncProfiles(?User $userToSearch = null): ?Profile\n {\n $this->syncArchivedProfilesAction->execute($this->team, $this->client, $this->config);\n\n try {\n $owners = $this->client->getOwners();\n } catch (\\HubSpot\\Client\\Crm\\Owners\\ApiException $e) {\n $this->logger->error('[HubSpot] Could not sync the profiles.', [\n 'team_id' => $this->team->getId(),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new CrmException('Could not sync the profiles.', $e->getCode(), $e);\n }\n\n $profileRepository = app(ProfileRepository::class);\n $teamRepository = app(TeamRepository::class);\n\n foreach ($owners as $owner) {\n if ($owner->getArchived()) {\n // not supposed to fetch archived, but log anyway\n $this->logger->warning('[HubSpot] Found archived owner', [\n 'crm_provider_id' => $owner->getId(),\n 'email' => $owner->getEmail(),\n ]);\n\n continue;\n }\n\n $email = $owner->getEmail();\n if ($email === null) {\n continue;\n }\n\n $user = $teamRepository->findActiveTeamMemberByEmail($this->team, $email);\n\n if (! $user instanceof User) {\n continue;\n }\n\n $profile = $profileRepository->updateOrCreateProfile($user, [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $owner->getId(),\n ]);\n\n if ($userToSearch && $userToSearch->getId() === $user->getId()) {\n return $profile;\n }\n }\n\n return null;\n }\n\n private function generateNameSearchPayload(string $name, int $offset, int $limit): array\n {\n $payload = [\n 'query' => $name,\n 'sorts' => [\n [\n 'propertyName' => 'modifieddate',\n 'direction' => 'DESCENDING',\n ],\n ],\n 'properties' => [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n 'industry',\n 'name',\n 'company',\n ],\n 'limit' => $limit,\n 'after' => $offset,\n ];\n\n $this->logger->debug('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n return $payload;\n }\n\n /**\n * @inheritdoc\n */\n public function find(string $name, array $scopes): array\n {\n $count = $this->limit ?? 20;\n $offset = $this->offset ?? 0;\n\n /** @var array<int, array<string, mixed>> */\n return Cache::remember(\n key: $this->team->getId() . $name . $count . $offset,\n ttl: 300,\n callback: function () use ($name, $offset, $count): array {\n $data = [];\n\n // Use the new V3 API to find contacts based on additional fields.\n foreach (['companies', 'contacts'] as $objectType) {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/' . $objectType . '/search';\n $payload = $this->generateNameSearchPayload($name, $offset, $count);\n $type = $objectType === 'companies' ? 'account' : 'contact';\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, [\n 'json' => $payload,\n ]);\n\n // Build mapped list.\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n\n $objectName = $this->buildContactName($properties);\n\n $record = [\n 'crmId' => $object['id'],\n // Pass crmUrl to the FE, needed for success message in the extension when you log activity.\n 'crmUrl' => $this->generateProviderUrl($object['id'], $type),\n 'name' => $objectName,\n 'prospectType' => $type,\n 'phoneNumbers' => [],\n ];\n\n if ($type === 'account') {\n $record['industry'] = $properties['industry'] ?? null;\n } else {\n $record['title'] = $properties['jobtitle'] ?? null;\n $record['organization'] = $properties['company'] ?? null;\n }\n\n $countryCode = $this->buildContactCountry($properties);\n $parsedNumber = $this->buildContactPhone($countryCode, $properties);\n\n // Add phone number to record.\n if (! empty($parsedNumber['phone'])) {\n $record['phoneNumbers'][] = [\n 'number' => $parsedNumber['phone'],\n 'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),\n 'type' => 'phone',\n ];\n }\n\n // Add mobile phone number to record.\n if (! empty($properties['mobilephone'])) {\n $mobileNumber = phone_e164($countryCode, $properties['mobilephone']);\n if ($mobileNumber !== null) {\n $record['phoneNumbers'][] = [\n 'number' => $mobileNumber,\n 'nationalFormat' => phone_national($countryCode, $mobileNumber),\n 'type' => 'mobile',\n ];\n }\n }\n\n $data[] = $record;\n }\n } catch (BadRequest $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->getUuid(),\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n }\n\n return $data;\n },\n );\n }\n\n\n /**\n * @inheritdoc\n */\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n $ownerId = null;\n\n if ($crmAccountId === null) {\n return $data;\n }\n\n if ($userId) {\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n $ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n $closedStages = $this->getClosedDealStages();\n $payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(\n $this->config,\n $crmAccountId,\n $closedStages,\n );\n\n $results = $this->client->getPaginatedData($payload, 'deals');\n\n foreach ($results['results'] as $object) {\n $properties = $object['properties'];\n\n $amount = null;\n if (empty($properties['amount']) === false) {\n $currency = $properties['deal_currency_code'] ?? $this->config->default_currency;\n\n // Values can contain commas and any junk so strip them.\n $value = (float) preg_replace('/[^\\d.]/', '', $properties['amount']);\n $amount = formatCurrency($value, $currency);\n }\n\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n\n if ($businessProcess === null) {\n // Import it.\n $stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n } else {\n $stage = $businessProcess\n ->stages()\n ->where('crm_provider_id', $properties['dealstage'])\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n if ($stage === null) {\n // Import it.\n $stage = $this->importStages(null, $properties['dealstage']);\n }\n }\n\n $recordType = null;\n if ($businessProcess) {\n $recordType = $businessProcess->recordTypes()->first();\n }\n\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $record = [\n 'crmId' => $object['id'],\n 'name' => $properties['dealname'] ?? 'Unknown Deal',\n 'value' => $amount,\n 'won' => $isWon,\n 'closed' => $isWon || $isLost,\n 'stage' => [\n 'id' => $stage?->getUuid() ?? '',\n 'name' => $stage?->getName() ?? '',\n ],\n ];\n\n if ($recordType) {\n $record += [\n 'recordType' => [\n 'id' => $recordType->id_string,\n 'name' => $recordType->name,\n ],\n ];\n }\n\n if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n }\n\n /**\n * @inheritdoc\n */\n public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array\n {\n $data = [];\n switch ($objectType) {\n case 'contact':\n $hsObject = 'contact';\n\n break;\n case 'account':\n $hsObject = 'company';\n\n break;\n default:\n // This is a hack to prioritise and override a contact/company with a deal.\n if ($opportunityId) {\n $hsObject = 'deal';\n $objectId = $opportunityId;\n } else {\n throw new InvalidArgumentException('Object type not supported.');\n }\n }\n\n $engagementTypes = ['meetings', 'tasks'];\n\n foreach ($engagementTypes as $engagementType) {\n $payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);\n\n $this->logger->info('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n $engagements = $this->client->getPaginatedData($payload, $engagementType);\n\n foreach ($engagements['results'] as $engagement) {\n if ($engagementType == 'meetings') {\n $title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';\n } elseif ($engagementType == 'tasks') {\n $title = $engagement['properties']['hs_task_subject'];\n } else {\n $title = 'Scheduled meeting';\n }\n\n $data[] = [\n 'crmId' => $engagement['id'],\n 'subject' => $title,\n 'due' => $engagement['properties']['hs_timestamp'],\n 'type' => $engagement['properties']['hs_activity_type'] ?? null,\n ];\n }\n }\n\n usort($data, function ($item1, $item2) {\n return $item2['due'] <=> $item1['due'];\n });\n\n return $data;\n }\n\n /**\n * Try to find CRM Objects using email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchExactlyByEmail(string $email, ?int $userId = null): ?array\n {\n $contactProperties = [\n 'email',\n// 'firstname',\n// 'lastname',\n// 'country',\n// 'phone',\n// 'mobilephone',\n// 'jobtitle',\n// 'hubspot_owner_id',\n// 'associatedcompanyid',\n// 'photo',\n ];\n $contact = null;\n $account = null;\n\n try {\n $hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);\n return null;\n\n if ($hsContact) {\n $contact = $this->importContact($hsContact);\n $account = $contact->account;\n }\n\n $data = $this->convertCrmData($contact, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n } catch (BadRequest $e) {\n $this->logger->warning('[HubSpot] Search failed', [\n 'team_id' => $this->team->getId(),\n 'search_identifier' => $email,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return null;\n }\n\n public function getDomain(string $email): ?string\n {\n return $this->getDomainFromEmail($email);\n }\n\n /**\n * Try to find CRM objects using domain name of the email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByDomain(string $domain, ?int $userId = null): ?array\n {\n $companyName = $domain;\n\n // Try to find a company matching their email domain.\n $companyProperties = [\n 'country',\n 'phone',\n 'name',\n 'hs_avatar_filemanager_key',\n 'industry',\n 'hubspot_owner_id',\n 'domain',\n ];\n\n try {\n $hsAccounts = $this->client\n ->getInstance()\n ->companies()\n ->searchByDomain($companyName, $companyProperties);\n } catch (Throwable $e) {\n $this->logger->info('[HubSpot] Search failed', [\n 'error' => $e->getMessage(),\n 'domain' => $domain,\n ]);\n\n return null;\n }\n\n $account = null;\n // If there are multiple accounts, don't guess, we'll ask later.\n if (\\count($hsAccounts->data->results) === 1) {\n // Persist this remote object.\n $account = $this->syncAccount($hsAccounts->data->results[0]->companyId);\n }\n\n $data = $this->convertCrmData(null, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n }\n\n /**\n * @return array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array\n {\n $countryCode = null;\n if ($contact && $contact->country_code) {\n $countryCode = $contact->country_code;\n } elseif ($account && $account->country_code) {\n $countryCode = $account->country_code;\n }\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact ? $contact->crm_provider_id : null,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n // If there are multiple opportunities, don't guess, we'll ask later.\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n protected function getCacheKey(string $object, ?int $userId = null): ?string\n {\n $key = $this->team->getId() . $object;\n $keySuffix = $this->getOwnerKeySuffix($userId);\n\n return $key . $keySuffix;\n }\n\n private function getOwnerKeySuffix(?int $userId = null): string\n {\n return $userId === null ? '' : (string) $userId;\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n *}\n */\n public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array\n {\n if (str_contains($phone, '**')) {\n return null;\n }\n\n // trim all whitespaces if present so the lookup doesn't fail\n $phone = str_replace(' ', '', $phone);\n\n // Check if the user is internal.\n if ($this->isPhoneNumberOfTeamMember($phone)) {\n return null;\n }\n\n $response = $this->searchForPhoneNumber($phone);\n if (empty($response)) {\n return null;\n }\n\n // This would ideally importContact instead but the response type differs.\n $contact = $this->findAndSyncContact($response['results'][0]['id']);\n if (! $contact instanceof Contact) {\n return null;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account?->crm_provider_id,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n\n try {\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n } catch (Exception $e) {\n $this->logger->debug('[HubSpot] Opportunity failed to sync.', [\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n private function isPhoneNumberOfTeamMember(string $phone): bool\n {\n $teamRepository = app(TeamRepository::class);\n $user = $teamRepository->findTeamMemberByPhone($this->team, $phone);\n\n if ($user instanceof User) {\n return true;\n }\n\n return false;\n }\n\n private function findAndSyncContact(string $crmId): ?Contact\n {\n try {\n return $this->syncContact($crmId);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'reason' => $exception->getMessage(),\n ]);\n\n return null;\n }\n }\n\n private function hasResults(array $response): bool\n {\n return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;\n }\n\n private function searchForPhoneNumber(string $phone): array\n {\n // Normalizes the provided phone number for the API search.\n $normalizedPhone = $this->normalizePhoneNumber($phone);\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);\n\n $this->logger->info('[HubSpot] Phone match search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);\n\n if (! $this->hasResults($response)) {\n $nationalPhone = preg_replace('/\\D/', '', phone_national(null, $phone));\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);\n\n $this->logger->info('[HubSpot] Phone match national number search triggered', [\n 'phone' => $phone,\n 'nationalPhone' => $nationalPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n if (! $this->hasResults($response)) {\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);\n\n $this->logger->info('[HubSpot] Phone match alternative search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n return $this->hasResults($response) ? $response : [];\n }\n\n private function handlePhoneSearchRequest(string $phone, array $payload): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/contacts/search';\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n $endpoint,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'phone' => $phone,\n 'reason' => $exception->getMessage(),\n ]);\n\n return [];\n }\n\n $this->logger->info('[HubSpot] Phone match completed', [\n 'phone' => $phone,\n 'response' => $response,\n ]);\n\n return $response->toArray();\n }\n\n private function normalizePhoneNumber(string $phone): string\n {\n return ltrim(phone_e164(null, $phone), '+0');\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByName(string $name, ?int $userId = null): ?array\n {\n // Don't waste time searching for single character strings.\n if (\\strlen($name) <= 1) {\n return null;\n }\n\n $cacheKey = $this->getCacheKey($name, $userId);\n\n $result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {\n $payload = $this->payloadBuilder->generateSearchContactsByNamePayload(\n $name,\n $this->getContactFields()\n );\n\n $hsContacts = $this->client->getPaginatedData($payload, 'contact');\n if (empty($hsContacts['results'])) {\n return false;\n }\n\n $contact = $this->importContact($hsContacts['results'][0]);\n if ($contact === null) {\n return false;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n });\n\n return is_array($result) ? $result : null;\n }\n\n\n private function convertActivityAssociations(Activity $activity): array\n {\n return [\n 'contactIds' => $this->getParticipantsIds($activity),\n 'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],\n 'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],\n 'ownerIds' => [],\n ];\n }\n\n private function getParticipantsIds(Activity $activity): array\n {\n $attendees = [];\n\n $participantRepository = app(ParticipantRepository::class);\n $participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);\n foreach ($participants as $participant) {\n if ($participant->user_id || $participant->isCoach()) {\n continue;\n }\n\n $contact = $participant->contact()->first();\n if ($contact && $contact->crm_provider_id) {\n $attendees[] = $contact->crm_provider_id;\n } else {\n if (! empty($participant->name)) {\n $attendeeData = $this->fetchMissingAttendeeInfo($participant);\n }\n if (! empty($attendeeData['id'])) {\n $attendees[] = $attendeeData['id'];\n }\n }\n }\n\n if ($activity->hasContact()) {\n $attendees[] = $activity->contact->crm_provider_id;\n }\n\n return array_unique($attendees);\n }\n\n private function fetchMissingAttendeeInfo(Participant $participant): array\n {\n // Check if we need to look inside an account context.\n $activity = $participant->getActivity();\n $companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;\n\n // First check the local data.\n /** @var Contact[] $contacts */\n $contacts = $this->team->contacts()\n ->with('account')\n ->where('name', $participant->name)\n ->whereNotNull('email')\n ->get();\n\n foreach ($contacts as $contact) {\n // If we have a company in scope, check the contact is associated to it.\n if (\n $companyId !== null\n && ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)\n ) {\n continue;\n }\n\n return [\n 'id' => $contact->crm_provider_id,\n 'email' => $contact->email,\n ];\n }\n\n $payload = $this->generateNameSearchPayload($participant->name, 0, 20);\n\n try {\n $response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);\n\n // TODO add some logic to choose the most suitable contact if multiple\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n if (empty($object['properties']) === false) {\n // Check the company matches the contact.\n // Todo: Move this check inside the API search.\n if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {\n continue;\n }\n\n return [\n 'id' => $object['id'],\n 'email' => $properties['email'],\n ];\n }\n }\n } catch (Exception $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->id_string,\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [];\n }\n\n /**\n * Store transcripts as note engagement.\n *\n * @throws Exception\n */\n public function createTranscriptNotes(Activity $activity): void\n {\n // For HS no need to check if Crm profile - Log Notes field is enabled\n // We only check if store_transcript toggle is enabled on crm profile.\n $engagement = [\n 'active' => true,\n 'ownerId' => $this->profile->crm_provider_id,\n 'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,\n 'type' => 'NOTE',\n ];\n\n // Generate activity transcription.\n $transcriptionData = $this->generateTranscription($activity);\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);\n\n $metadata = [\n 'body' => $transcripts,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsEngagement = $this->client\n ->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $noteId = $hsEngagement->data->engagement->id;\n\n // Store crm logged id in transcription.\n $transcription = $activity->getTranscription();\n $transcription->crm_activity_id = $noteId;\n $transcription->save();\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $payload = [\n 'properties' => $data,\n ];\n\n try {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n $this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);\n\n break;\n case FieldData::OBJECT_CONTACT:\n $this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_ACCOUNT:\n $this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_TASK:\n // Endpoint for Engagements not ready\n $engagements = [\n 'type' => 'TASK',\n ];\n $metadata = $data;\n $this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $objectId],\n $metadata,\n );\n\n break;\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $apiException) {\n $errorMessage = $apiException->getMessage();\n if ($apiException->getResponseBody()) {\n $responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);\n $errorMessage = $responseBody['message'] ?? $apiException->getMessage();\n }\n\n $this->logger->error(\n '[HubSpot] Update record failed',\n [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'payload' => $payload,\n 'reason' => $errorMessage,\n 'team' => $this->team->getUuid(),\n ]\n );\n\n throw new CrmException($errorMessage);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n return $this->client->getInstance()->deals()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_CONTACT:\n return $this->client->getInstance()->contacts()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_ACCOUNT:\n return $this->client->getInstance()->companies()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_TASK:\n return $this->client->getInstance()->engagements()->get($objectId)->toArray();\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n }\n\n /**\n * @throws BadRequest\n * @throws CrmException\n */\n public function updateStage($crmObject, Stage $stage): void\n {\n $payload = [\n 'properties' => [\n [\n 'name' => 'dealstage',\n 'value' => $stage->crm_provider_id,\n ],\n ],\n ];\n\n try {\n $this->client->getInstance()->deals()->update($crmObject->crm_provider_id, $payload);\n } catch (BadRequest $badRequest) {\n if ($badRequest->getCode() === 403) {\n throw new CrmException(\n \"Sorry, you don't have permission to update this stage.\",\n $badRequest->getCode(),\n $badRequest,\n );\n }\n\n $this->logger->warning('[HubSpot] Stage update failed', [\n 'dealId' => $crmObject->crm_provider_id,\n 'payload' => $payload,\n 'message' => $badRequest->getMessage(),\n ]);\n\n throw $badRequest;\n }\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n $url = null;\n $baseUrl = 'https://app.hubspot.com/contacts/' . $this->config->crm_provider_id . '/';\n\n switch ($objectType) {\n case 'account':\n $url = $baseUrl . 'company/' . $providerId;\n\n break;\n\n case 'contact':\n $url = $baseUrl . 'contact/' . $providerId;\n\n break;\n\n case 'opportunity':\n $url = $baseUrl . 'deal/' . $providerId;\n\n break;\n\n case 'task':\n case 'activity':\n return null;\n\n // This should not be deep-linked as per JMNY-3934.\n //$url = $baseUrl.'tasks/list/view/all/?taskId='.$providerId;\n break;\n }\n\n return $url;\n }\n\n public function searchCalls(Carbon $from, Carbon $to, string $activityProvider): array\n {\n $this->logger->info('[HubSpot] Search calls', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $calls = [];\n $page = 1;\n\n do {\n try {\n $payload = $this->payloadBuilder->generateGetCallsPayload($from, $to, $activityProvider, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n $calls = array_merge($calls, $responseResults);\n $page++;\n } while (! empty($responseResults));\n\n return $calls;\n }\n\n public function searchCallsForPeriodByPage(Carbon $from, Carbon $to, int $page, bool $retry = true)\n {\n try {\n $payload = $this->payloadBuilder->generateSearchCallsByPeriodPayload($from, $to, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls for period failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallsForPeriodByPage($from, $to, $page, false);\n }\n $response = null;\n }\n\n return $response;\n }\n\n public function searchCallsForPeriod(Carbon $from, Carbon $to): Generator\n {\n $this->logger->info('[HubSpot] Search calls for period', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $page = 1;\n\n do {\n $response = $this->searchCallsForPeriodByPage($from, $to, $page);\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n\n $associationContacts = $this->getAssociationDataForCollection($responseResults, 'calls', 'contacts');\n $associationCompanies = $this->getAssociationDataForCollection($responseResults, 'calls', 'companies');\n $associationDeals = $this->getAssociationDataForCollection($responseResults, 'calls', 'deals');\n\n foreach ($responseResults as $call) {\n $call['associations'] = [\n 'contacts' => $this->importAssociationData($call, $associationContacts),\n 'companies' => $this->importAssociationData($call, $associationCompanies),\n 'deals' => $this->importAssociationData($call, $associationDeals),\n ];\n\n yield $call;\n }\n $page++;\n } while (! empty($responseResults));\n }\n\n public function getCall(string $callId): array\n {\n $this->logger->info('[HubSpot] Get call', [\n 'call_id' => $callId,\n ]);\n\n $searchAttributes = $this->payloadBuilder->getSearchCallAttributes();\n $endpoint = sprintf(\n 'https://api.hubapi.com/crm/v3/objects/calls/%s',\n $callId,\n );\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'GET',\n $endpoint,\n [],\n sprintf(\n 'properties=%s&associations=contacts,companies,deals',\n implode(',', $searchAttributes),\n ),\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Get call failed', [\n 'call_id' => $callId,\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n return empty($response) ? [] : $response->toArray();\n }\n\n public function bulkAddPlaybackURLToDescription(array $crmUpdateData): array\n {\n $crmUpdateBatches = array_chunk($crmUpdateData, self::BATCH_UPDATE_LIMIT);\n\n $updatedCrmIds = [];\n\n foreach ($crmUpdateBatches as $crmBatch) {\n $payload = $this->payloadBuilder->generatePlaybackAddUrlBatchPayload($crmBatch);\n $updateSuccess = $this->bulkAddPlaybackURLToDescriptionRequest($payload);\n if ($updateSuccess) {\n $updatedCrmIds = array_merge($updatedCrmIds, array_column($crmBatch, 'crm_id'));\n }\n }\n\n return $updatedCrmIds;\n }\n\n private function bulkAddPlaybackURLToDescriptionRequest(array $payload, bool $retry = true): bool\n {\n try {\n $this->client->getNewInstance()->crm()->objects()->batchApi()->update('calls', $payload);\n\n return true;\n } catch (\\HubSpot\\Client\\Crm\\Objects\\ApiException $e) {\n $response = json_decode($e->getResponseBody(), true);\n $retryAfter =\n isset($response['policyName'])\n && $response['policyName'] == self::TEN_SECONDLY_ROLLING_POLICY\n ? self::TEN_SECONDLY_ROLLING_LIMIT\n : 1;\n } catch (Exception $e) {\n $retryAfter = 1;\n }\n\n $this->logger->warning('[HubSpot] Bulk add playback url to CRM failed', [\n 'reason' => $e->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep($retryAfter);\n\n return $this->bulkAddPlaybackURLToDescriptionRequest($payload, false);\n }\n\n return false;\n }\n\n /**\n * Sometimes we have secondly rate limit error, then retry request after 1 second\n */\n public function searchCallByRecordingURLToken(string $playbackURLToken, bool $retry = true): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n $payload = $this->payloadBuilder->generateSearchCallByTokenPayload($playbackURLToken);\n\n $this->logger->info('[HubSpot] CRM Search by playback URL token requested', [\n 'request' => $payload,\n ]);\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, ['json' => ($payload)]);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search by playback URL token failed', [\n 'playbackURLToken' => $playbackURLToken,\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallByRecordingURLToken($playbackURLToken, false);\n }\n\n return [];\n }\n\n return empty($response['results']) ? [] : $response['results'][0];\n }\n\n /**\n * Generate transcription for the activity.\n */\n private function generateTranscription(Activity $activity): string\n {\n if (! $this->config->store_transcript) {\n // If sending transcription to activity toggle is disabled\n return '';\n }\n\n $transcriptionSegments = $this->transcriptionService->findTranscriptionByActivity($activity);\n\n if ($transcriptionSegments->isEmpty()) {\n return '';\n }\n\n $transcription = sprintf(\n '<p><strong>Transcript for %s</strong></p><p></p>',\n $activity->title ?? $activity->activity_title,\n );\n\n $roomOwnerParticipant = $activity->findParticipantRoomOwner();\n $roomOwnerParticipantId = $roomOwnerParticipant !== null\n ? $roomOwnerParticipant->getId()\n : null;\n\n\n $transcription .= $transcriptionSegments\n ->map(static function (array $transcriptionSegment) use ($roomOwnerParticipantId): string {\n $isOrganiser = $roomOwnerParticipantId === $transcriptionSegment['participantId']\n && $roomOwnerParticipantId !== null;\n $transcriptColor = $isOrganiser ? '#000000' : '#f0415a';\n\n return sprintf(\n '<span style=\"color: %s;\">%s | </span>%s',\n $transcriptColor,\n $transcriptionSegment['formattedStartsAt'],\n $transcriptionSegment['transcript'],\n );\n })\n ->implode('<br />');\n\n return $transcription;\n }\n\n /**\n * @param array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }> $options\n *\n * @return FieldData[]\n */\n private function importOptions(Field $field, array $options): array\n {\n $fieldValues = [];\n $values = [];\n $sequence = 0;\n\n foreach ($options as $option) {\n $values[] = [\n 'value' => $option['value'] ?? $option['id'],\n 'label' => substr($option['label'], 0, 255),\n 'sequence' => $sequence++,\n ];\n }\n\n $fieldsToPurge = $field->values()->get()->pluck('value')->toArray();\n\n foreach ($values as $value) {\n $value['value'] = substr($value['value'], 0, 255);\n $fieldValues[] = $field->values()->updateOrCreate([\n 'value' => $value['value'],\n ], $value);\n\n // Remove this value from the ones we are going to purge.\n if (($key = array_search($value['value'], $fieldsToPurge, false)) !== false) {\n unset($fieldsToPurge[$key]);\n }\n }\n\n // Delete the old values that are no longer used.\n $field->values()->whereIn('value', $fieldsToPurge)->delete();\n\n return $fieldValues;\n }\n\n public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null || $objectId === null) {\n return null;\n }\n\n /** @var User $user */\n $user = $activity->getUser();\n\n $profile = $this->assignCrmOwner($user, $activity);\n if (! $profile instanceof Profile) {\n return null;\n }\n\n $timestamp = Carbon::now($user->getTimezone())->getTimestamp() * 1000;\n $engagement = [\n 'active' => true,\n 'ownerId' => $profile->getAttribute('crm_provider_id'),\n 'timestamp' => $timestamp,\n 'type' => 'NOTE',\n ];\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $body = mb_strimwidth($body, 0, self::ENGAGEMENT_BODY_MAX_LENGTH);\n $metadata = [\n 'body' => $body,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsActivityId = $this->client->createNote(\n body: $body,\n ownerId: $profile->getCrmProviderId(),\n timestamp: $timestamp,\n objectId: $objectId,\n noteObject: $noteObject,\n );\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $this->logger->info('[HubSpot] Saving Transcription Summary as Note', [\n 'activity' => $activity->getUuid(),\n 'crmActivity' => $hsActivityId,\n ]);\n\n return $hsActivityId;\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function attachSummaryToActivity(ActivityContract $activity, string $summaryTitle, string $summaryContents): bool\n {\n $this->logger->info('[HubSpot] Attaching summary to activity', [\n 'activity' => $activity->getUuid(),\n 'summary_content' => $summaryContents,\n ]);\n\n if (! $activity instanceof Activity) {\n throw new InvalidArgumentException('Expected instance of Activity');\n }\n\n $summary = '<p><strong>' . $summaryTitle . '</strong></p>';\n $summary .= '<p>' . $summaryContents . '</p>';\n $metadata = $this->buildMetadataForSummaryUpdate($activity, $summary);\n\n try {\n $type = $this->matchActivityEngagementType($activity);\n $engagement = ['type' => $type];\n\n $this->client->updateEngagement($activity->getCrmProviderId(), $engagement, $metadata);\n } catch (Exception $e) {\n $this->logger->warning('[HubSpot] Update summary failed', [\n 'activity' => $activity->getUuid(),\n 'reason' => $e->getMessage(),\n ]);\n\n return false;\n }\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $activity->getCrmProviderId()],\n $metadata,\n );\n\n return true;\n }\n\n private function buildMetadataForSummaryUpdate(Activity $activity, string $summary): array\n {\n $descriptionField = $activity->getType() === Activity::TYPE_CONFERENCE ? 'internalMeetingNotes' : 'body';\n $engagement = $this->client->getEngagementData($activity->getCrmProviderId());\n // Meeting without internalMeetingNotes might mean it just does not have any notes;\n $description = $engagement['metadata'][$descriptionField] ?? null;\n\n if (empty($description)) {\n $data = $summary;\n } else {\n // avoid playbook url link to Jiminny being sent twice in the activity description\n $targetUrl = PlaybackUrlBuilder::build($activity);\n\n if (str_contains($description, $targetUrl)) {\n $jiminnyUrl = '<p><a href=\"' . $targetUrl . '\" title=\"Play at Jiminny\">Play at Jiminny</a></p>';\n $summary = str_replace($jiminnyUrl, '', $summary);\n\n $this->logger->info('[HubSpot] Summary modified', [\n 'activity' => $activity->getUuid(),\n 'target_url' => $jiminnyUrl,\n 'modified_summary_content' => $summary,\n ]);\n }\n\n $data = $description . '<p></p>' . $summary;\n }\n\n return [\n $descriptionField => $data,\n ];\n }\n\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n return $this->syncRelatedActivityManager->fetchAndAssociateRelatedActivity($activity);\n }\n\n public function fetchRelatedActivity(Activity $activity): array\n {\n return [];\n }\n\n public function getDealsInBulk(array $dealIds): array\n {\n $payload = $this->payloadBuilder->getDealsInBulkPayload($dealIds);\n\n return $this->client->getPaginatedData($payload, 'deals');\n }\n\n /**\n * Extract deal IDs from HubSpot search response.\n *\n * @param array $hubspotResponse The raw HubSpot search API response.\n * @param bool $includeArchived Whether to include archived deals (default: false).\n *\n * @return string[] Array of deal IDs as strings.\n */\n public function extractDealIds(array $hubspotResponse, bool $includeArchived = false): array\n {\n if (empty($hubspotResponse['results'])) {\n return [];\n }\n\n return array_values(\n array_map(\n fn ($deal) => $deal['id'],\n array_filter(\n $hubspotResponse['results'],\n fn ($deal) => $includeArchived || empty($deal['archived'])\n )\n )\n );\n }\n\n public function matchActivityEngagementType(Activity $activity): string\n {\n return match ($activity->getType()) {\n Activity::TYPE_CONFERENCE => self::TYPE_MEETING,\n Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND => self::TYPE_CALL,\n default => self::TYPE_NOTE,\n };\n }\n\n private function assignCrmOwner(User $user, ActivityContract $activity): ?Profile\n {\n $profile = $user->getProfile();\n if ($profile instanceof Profile) {\n return $profile;\n }\n\n $this->logger->info('[HubSpot] Unable to save summary. No profile', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n private static function getDealsPipelinesEndpoint(): string\n {\n return self::API_URL . self::ENDPOINT_PIPELINES . self::PIPELINE_OBJECT_TYPE_DEALS;\n }\n\n public function verifyTaskExists(Activity $activity): bool\n {\n $crmProviderId = $activity->getCrmProviderId();\n $cacheKey = \"crm_task_exists:{$this->config->getId()}:$crmProviderId\";\n\n return Cache::remember($cacheKey, self::TASK_VERIFICATION_CACHE_TTL, function () use ($crmProviderId) {\n try {\n $engagement = $this->client->getEngagementData($crmProviderId);\n\n return ! empty($engagement);\n } catch (HttpNotFoundException|BadRequest) {\n // Engagement not found in CRM - this is expected and permanent\n $this->logger->info('[Hubspot] Engagement not found during verification', [\n 'engagement_id' => $crmProviderId,\n 'config_id' => $this->config->getId(),\n ]);\n\n return false;\n }\n // Let other exceptions (network errors, rate limits, etc.) bubble up for retry\n });\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1966321079585168372
|
-3269213808139494299
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:34:39] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":32728,"workerId":"","target":"activities"} {"correlation_id":"2dc91923-2a7f-4251-9ddd-5663739b2850","trace_id":"2bc19bcd-96d0-45d9-b13c-1c1dba7aff9f"}
[2026-05-07 12:35:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"174592ac-ef13-4e4e-bf6c-471037fb39b9","trace_id":"01ae22a0-6724-4f95-bcd6-02b23ee9896e"}
[2026-05-07 12:35:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0","trace_id":"da1dcdd2-a656-4e5e-8a4b-c714d1175381"}
[2026-05-07 12:35:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0db30a7b-1da3-4c9e-8c71-21b3bee4b2b0","trace_id":"da1dcdd2-a656-4e5e-8a4b-c714d1175381"}
[2026-05-07 12:35:08] local.NOTICE: Monitoring start {"correlation_id":"cc05b2e5-39a2-4fb1-8859-871c3d987279","trace_id":"168cc802-ec5c-4bfd-bfa8-45571e2946cc"}
[2026-05-07 12:35:08] local.NOTICE: Monitoring end {"correlation_id":"cc05b2e5-39a2-4fb1-8859-871c3d987279","trace_id":"168cc802-ec5c-4bfd-bfa8-45571e2946cc"}
[2026-05-07 12:35:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8fdc327b-c3dd-4eed-b9a9-00cc263ed461","trace_id":"2b164538-6384-413e-a68b-589aabda4af3"}
[2026-05-07 12:35:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8fdc327b-c3dd-4eed-b9a9-00cc263ed461","trace_id":"2b164538-6384-413e-a68b-589aabda4af3"}
[2026-05-07 12:35:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2c210df4-febc-4c68-b86e-f5fa6eea2d8e","trace_id":"4a47a36e-f456-4b67-bb03-48ce9b2c4ce0"}
[2026-05-07 12:35:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ef495688-effa-4ee7-9b81-ccb161f7c3bf","trace_id":"26eabbbc-6174-434e-9756-1b84825f03ab"}
[2026-05-07 12:35:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ef495688-effa-4ee7-9b81-ccb161f7c3bf","trace_id":"26eabbbc-6174-434e-9756-1b84825f03ab"}
[2026-05-07 12:35:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aac3580d-654c-4490-ab7d-7d91ff1ce423","trace_id":"c35dd663-0ae1-4d03-b56d-120bf7292ecb"}
[2026-05-07 12:35:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aac3580d-654c-4490-ab7d-7d91ff1ce423","trace_id":"c35dd663-0ae1-4d03-b56d-120bf7292ecb"}
[2026-05-07 12:35:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:18] local.INFO: Running pre-meeting notification command {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4e9986d1-25ed-4e81-868f-e6021368d776","trace_id":"e3aa7f2f-780a-4150-9c5a-25b0fb35be7b"}
[2026-05-07 12:35:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:25:00, 2026-05-07 12:30:00] {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5e93afe-4aba-4f70-8fb0-859ea99739a7","trace_id":"9cf12f9e-4128-4f82-ac7d-faaba7eb3228"}
[2026-05-07 12:35:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:30","to":"12:35"} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:25","to":"02:30"} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ecd235ab-ce80-4436-9d41-19760ccf43a7","trace_id":"b83badb5-9434-41b9-acd6-3ccd099a581c"}
[2026-05-07 12:35:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"b04b75c8-edd6-46d5-834b-a276a7fca1c8","trace_id":"9e98a255-f6d0-4d37-961a-51f9241c99e4"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"de4aa643-9d23-4d24-8c6a-ba951496144e","trace_id":"169c2fe6-d32d-45e5-9682-6ae91ce0396f"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e37299b2-0176-4eac-815f-0caabf7af320","trace_id":"c47be302-8931-4988-a55d-3560a61143b6"}
[2026-05-07 12:35:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"de4aa643-9d23-4d24-8c6a-ba951496144e","trace_id":"169c2fe6-d32d-45e5-9682-6ae91ce0396f"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:37:36.789343Z"} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"79eb6ad9-b5e4-435e-95ad-e451fa993e6a","trace_id":"929f5d76-3dbd-4a1b-8db3-65234198f9af"}
[2026-05-07 12:35:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldDefinition array{
* name: string,
* label: string,
* description: string,
* type: string,
* fieldType: string,
* hidden: bool,
* showCurrencySymbol: bool,
* options: array<array{
* id: string,
* label: string,
* value?: string,
* }
*/
class Service extends BaseService implements
HubspotInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
SendSummaryToCrmInterface,
MatchDomainByEmailInterface,
SavePlaybackLinkToCrmInterface,
RemoteEntityManipulationInterface,
FetchRelatedActivityInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
VerifyTaskExistsInterface
{
use ResolveCompanyNameByEmailTrait;
use SyncCrmEntitiesTrait;
use WriteCrmTrait;
use SyncFieldsTrait;
use OpportunitySyncTrait;
private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;
private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';
private const int BATCH_UPDATE_LIMIT = 100;
private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';
private const int TEN_SECONDLY_ROLLING_LIMIT = 10;
private const string CALLS_SEARCH_ENDPOINT = '[URL_WITH_CREDENTIALS] ClientInterface|Client
*/
protected $client;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected ProspectPhotoPathService $prospectPhotoPathService;
private SyncFieldAction $syncFieldAction;
private PayloadBuilder $payloadBuilder;
private SyncRelatedActivityManager $syncRelatedActivityManager;
private SyncArchivedProfilesAction $syncArchivedProfilesAction;
private WebhookSyncBatchProcessor $batchProcessor;
public function __construct(
Client $client,
SyncFieldAction $syncFieldAction,
PayloadBuilder $payloadBuilder,
ProspectPhotoPathService $prospectPhotoPathService,
SyncArchivedProfilesAction $syncArchivedProfilesAction,
WebhookSyncBatchProcessor $batchProcessor,
) {
parent::__construct();
$this->client = $client;
$this->syncFieldAction = $syncFieldAction;
$this->prospectPhotoPathService = $prospectPhotoPathService;
$this->payloadBuilder = $payloadBuilder;
$this->syncArchivedProfilesAction = $syncArchivedProfilesAction;
$this->batchProcessor = $batchProcessor;
$this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [
'client' => $this->client,
]);
$this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [
'client' => $this->client,
'payloadBuilder' => $this->payloadBuilder,
'logger' => $this->logger,
]);
$this->crmEntityRepository = app(CrmEntityRepository::class);
$this->dealFieldsService = app(DealFieldsService::class);
}
public function getDisplayName(): string
{
return 'HubSpot';
}
protected function getOAuthAccount(User $user): ?SocialAccount
{
// In this case, the Account Owner is always the connection for any API operations.
$owner = $user->team->owner;
return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);
}
public function getClient(): Client
{
/** @var Client */
return $this->client;
}
/**
* Convert raw field data into a format compatible with CRM APIs.
*
* @param bool $internal Direction of the conversion.
* True is pulling from CRM, false normalize before sending to CRM.
*/
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return ValueNormalizer::normalize(
fieldType: $fieldType,
fieldValue: $fieldValue,
isInbound: $internal,
);
}
/**
* @inheritdoc
*/
public function getDefaultFields(string $activityType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
$defaultFields = FieldDefinitions::defaultTaskFields();
// This lazy creates these fields if not already setup.
foreach ($defaultFields as $defaultField) {
$fields[] = $this->config->fields()->firstOrCreate($defaultField);
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function getDefaultActivityField(string $activityType): Field
{
/** @var Field $activityField */
$activityField = $this->config->fields()->where([
'crm_provider_id' => 'activityType',
'object_type' => $activityType,
])->first();
return $activityField;
}
/**
* @inheritdoc
*/
public function getSupportedPlaybookTypes(): array
{
return [Playbook::ACTIVITY_TYPE_TASK];
}
/**
* @inheritdoc
*/
public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
// Outcome should always be provided calls/meetings.
$fieldData = [
[
'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',
'object_type' => Field::OBJECT_TASK,
],
];
foreach ($fieldData as $data) {
$field = $this->config->fields()->where($data)->first();
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
}
return $fields;
}
public function getDealInsightsFields(): array
{
return FieldDefinitions::dealInsightsFields();
}
protected function getDefaultFollowupLayoutFields(string $activityType): array
{
$fields = [];
$fieldRepo = app(FieldRepository::class);
$fieldData = FieldDefinitions::followupFieldsFilter();
foreach ($fieldData as $data) {
$field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function syncField(Field $field): void
{
switch ($field->object_type) {
case Field::OBJECT_ACCOUNT:
$crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_CONTACT:
$crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_OPPORTUNITY:
$crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_TASK:
$this->syncSingleTaskField($field);
return;
default:
return;
}
$this->syncFieldAction->execute($field, $crmField->toArray());
}
/**
* @param array<array{
* id:string,
* label:string,
* value?:string
* }> $options
*
* @throws CrmException
*
* @return FieldData[]
*
*/
public function importPicklistValues(
Field $field,
array $options = [['id' => '', 'label' => '', 'value' => '']],
): array {
if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {
// We already have the options, no need to fetch them again
return $this->importOptions($field, $options);
}
$options = [];
switch ($field->getObjectType()) {
case Field::OBJECT_ACCOUNT:
$options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());
break;
case Field::OBJECT_CONTACT:
$options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());
break;
case Field::OBJECT_OPPORTUNITY:
// Hubspot has different endpoint for stages
$options = $this->getClient()->fetchOpportunityFieldOptions($field);
break;
case Field::OBJECT_TASK:
if ($field->getCrmProviderId() === 'disposition') {
$options = $this->getClient()->fetchDispositionFieldOptions();
} elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {
$options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);
}
break;
default:
$this->logger->warning('Invalid object type', [
'object_type' => $field->getObjectType(),
'field_id' => $field->getId(),
]);
throw new CrmException('Invalid object type');
}
return $this->importOptions($field, $options);
}
/**
* @inheritdoc
*/
public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage
{
$missingStage = null;
try {
// Use the HubSpot API client instead of the SDK crmPipelines() method
$endpoint = self::getDealsPipelinesEndpoint();
$pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);
$pipelines = $pipelinesResponse->data->results;
} catch (RequestException|BadRequest $exception) {
throw $exception;
}
foreach ($pipelines as $pipeline) {
$stages = [];
// We create a business process to contain the pipeline, and store all stages against it.
$p = ResponseNormalize::normalizePipeline($pipeline);
// Create/update business process for this pipeline
$businessProcess = $this->config->businessProcesses()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'type' => BusinessProcess::TYPE_OPPORTUNITY,
'is_selectable' => $p['active'],
]);
// A record type is really a clone of the business process, used to store which record uses which pipeline.
// Create/update record type clone
$this->config->recordTypes()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'is_selectable' => $p['active'],
'business_process_id' => $businessProcess->id ?? null,
]);
// Stages - fetch all existing stages upfront to avoid N+1 queries
$existingStages = $this->config->stages()
->withTrashed()
->where('type', Stage::TYPE_OPPORTUNITY)
->get()
->keyBy('crm_provider_id');
foreach ($p['stages'] as $dealStage) {
$s = ResponseNormalize::normalizeDealStage($dealStage);
/** @var ?Stage $existingStage */
$existingStage = $existingStages->get($s['id']);
// Restore soft-deleted stages that are now active in HubSpot
if ($existingStage?->trashed() && $s['active']) {
$existingStage->restore();
}
// Upsert stage (updates soft-deleted records without restoring them)
$stage = $this->config->stages()->withTrashed()->updateOrCreate([
'crm_provider_id' => $s['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($s['label'], 0, 50),
'label' => mb_strimwidth($s['label'], 0, 191),
'type' => Stage::TYPE_OPPORTUNITY,
'sequence' => $s['displayOrder'],
'is_selectable' => $s['active'],
'probability' => $s['probability'] * 100,
]);
if ($missingStageName === $s['id']) {
$missingStage = $stage;
}
$stages[] = $stage->id;
}
$businessProcess->stages()->sync($stages);
}
return $missingStage;
}
/**
* @inheritdoc
*/
public function syncOrganization(): void
{
try {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function find(string $name, array $scopes): array
{
$count = $this->limit ?? 20;
$offset = $this->offset ?? 0;
/** @var array<int, array<string, mixed>> */
return Cache::remember(
key: $this->team->getId() . $name . $count . $offset,
ttl: 300,
callback: function () use ($name, $offset, $count): array {
$data = [];
// Use the new V3 API to find contacts based on additional fields.
foreach (['companies', 'contacts'] as $objectType) {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$ownerId = null;
if ($crmAccountId === null) {
return $data;
}
if ($userId) {
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
$ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
$closedStages = $this->getClosedDealStages();
$payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(
$this->config,
$crmAccountId,
$closedStages,
);
$results = $this->client->getPaginatedData($payload, 'deals');
foreach ($results['results'] as $object) {
$properties = $object['properties'];
$amount = null;
if (empty($properties['amount']) === false) {
$currency = $properties['deal_currency_code'] ?? $this->config->default_currency;
// Values can contain commas and any junk so strip them.
$value = (float) preg_replace('/[^\d.]/', '', $properties['amount']);
$amount = formatCurrency($value, $currency);
}
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
if ($businessProcess === null) {
// Import it.
$stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
} else {
$stage = $businessProcess
->stages()
->where('crm_provider_id', $properties['dealstage'])
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
if ($stage === null) {
// Import it.
$stage = $this->importStages(null, $properties['dealstage']);
}
}
$recordType = null;
if ($businessProcess) {
$recordType = $businessProcess->recordTypes()->first();
}
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$record = [
'crmId' => $object['id'],
'name' => $properties['dealname'] ?? 'Unknown Deal',
'value' => $amount,
'won' => $isWon,
'closed' => $isWon || $isLost,
'stage' => [
'id' => $stage?->getUuid() ?? '',
'name' => $stage?->getName() ?? '',
],
];
if ($recordType) {
$record += [
'recordType' => [
'id' => $recordType->id_string,
'name' => $recordType->name,
],
];
}
if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
}
/**
* @inheritdoc
*/
public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array
{
$data = [];
switch ($objectType) {
case 'contact':
$hsObject = 'contact';
break;
case 'account':
$hsObject = 'company';
break;
default:
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3714
|
136
|
17
|
2026-05-07T12:37:18.247823+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778157438247_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring start {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring end {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
Sync Changes
Hide This Notification
Code changed:
Hide
8
51
1
33
1
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Services\Crm\Hubspot;
use Carbon\Carbon;
use Exception;
use Generator;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Cache;
use InvalidArgumentException;
use Jiminny\Contracts\Repositories\TeamRepository;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\HubspotInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SavePlaybackLinkToCrmInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Contracts\Services\Crm\VerifyTaskExistsInterface;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\HttpNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contact;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Participant;
use Jiminny\Models\Playbook;
use Jiminny\Models\SocialAccount;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Repositories\Crm\FieldRepository;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\ParticipantRepository;
use Jiminny\Services\Avatar\ProspectPhotoPathService;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\Hubspot\Actions\SyncArchivedProfilesAction;
use Jiminny\Services\Crm\Hubspot\Fields\ValueNormalizer;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\OpportunitySyncTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncFieldsTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\WriteCrmTrait;
use Jiminny\Services\Crm\MatchDomainByEmailInterface;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Services\Crm\ResolveCompanyNameByEmailTrait;
use Jiminny\Utils\PlaybackUrlBuilder;
use Sentry;
use SevenShores\Hubspot\Exceptions\BadRequest;
use Throwable;
use UnexpectedValueException;
/**
* @phpstan-type CrmFieldDefinition array{
* name: string,
* label: string,
* description: string,
* type: string,
* fieldType: string,
* hidden: bool,
* showCurrencySymbol: bool,
* options: array<array{
* id: string,
* label: string,
* value?: string,
* }
*/
class Service extends BaseService implements
HubspotInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
SendSummaryToCrmInterface,
MatchDomainByEmailInterface,
SavePlaybackLinkToCrmInterface,
RemoteEntityManipulationInterface,
FetchRelatedActivityInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
VerifyTaskExistsInterface
{
use ResolveCompanyNameByEmailTrait;
use SyncCrmEntitiesTrait;
use WriteCrmTrait;
use SyncFieldsTrait;
use OpportunitySyncTrait;
private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;
private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';
private const int BATCH_UPDATE_LIMIT = 100;
private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';
private const int TEN_SECONDLY_ROLLING_LIMIT = 10;
private const string CALLS_SEARCH_ENDPOINT = '[URL_WITH_CREDENTIALS] ClientInterface|Client
*/
protected $client;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected ProspectPhotoPathService $prospectPhotoPathService;
private SyncFieldAction $syncFieldAction;
private PayloadBuilder $payloadBuilder;
private SyncRelatedActivityManager $syncRelatedActivityManager;
private SyncArchivedProfilesAction $syncArchivedProfilesAction;
private WebhookSyncBatchProcessor $batchProcessor;
public function __construct(
Client $client,
SyncFieldAction $syncFieldAction,
PayloadBuilder $payloadBuilder,
ProspectPhotoPathService $prospectPhotoPathService,
SyncArchivedProfilesAction $syncArchivedProfilesAction,
WebhookSyncBatchProcessor $batchProcessor,
) {
parent::__construct();
$this->client = $client;
$this->syncFieldAction = $syncFieldAction;
$this->prospectPhotoPathService = $prospectPhotoPathService;
$this->payloadBuilder = $payloadBuilder;
$this->syncArchivedProfilesAction = $syncArchivedProfilesAction;
$this->batchProcessor = $batchProcessor;
$this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [
'client' => $this->client,
]);
$this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [
'client' => $this->client,
'payloadBuilder' => $this->payloadBuilder,
'logger' => $this->logger,
]);
$this->crmEntityRepository = app(CrmEntityRepository::class);
$this->dealFieldsService = app(DealFieldsService::class);
}
public function getDisplayName(): string
{
return 'HubSpot';
}
protected function getOAuthAccount(User $user): ?SocialAccount
{
// In this case, the Account Owner is always the connection for any API operations.
$owner = $user->team->owner;
return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);
}
public function getClient(): Client
{
/** @var Client */
return $this->client;
}
/**
* Convert raw field data into a format compatible with CRM APIs.
*
* @param bool $internal Direction of the conversion.
* True is pulling from CRM, false normalize before sending to CRM.
*/
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return ValueNormalizer::normalize(
fieldType: $fieldType,
fieldValue: $fieldValue,
isInbound: $internal,
);
}
/**
* @inheritdoc
*/
public function getDefaultFields(string $activityType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
$defaultFields = FieldDefinitions::defaultTaskFields();
// This lazy creates these fields if not already setup.
foreach ($defaultFields as $defaultField) {
$fields[] = $this->config->fields()->firstOrCreate($defaultField);
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function getDefaultActivityField(string $activityType): Field
{
/** @var Field $activityField */
$activityField = $this->config->fields()->where([
'crm_provider_id' => 'activityType',
'object_type' => $activityType,
])->first();
return $activityField;
}
/**
* @inheritdoc
*/
public function getSupportedPlaybookTypes(): array
{
return [Playbook::ACTIVITY_TYPE_TASK];
}
/**
* @inheritdoc
*/
public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
// Outcome should always be provided calls/meetings.
$fieldData = [
[
'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',
'object_type' => Field::OBJECT_TASK,
],
];
foreach ($fieldData as $data) {
$field = $this->config->fields()->where($data)->first();
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
}
return $fields;
}
public function getDealInsightsFields(): array
{
return FieldDefinitions::dealInsightsFields();
}
protected function getDefaultFollowupLayoutFields(string $activityType): array
{
$fields = [];
$fieldRepo = app(FieldRepository::class);
$fieldData = FieldDefinitions::followupFieldsFilter();
foreach ($fieldData as $data) {
$field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function syncField(Field $field): void
{
switch ($field->object_type) {
case Field::OBJECT_ACCOUNT:
$crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_CONTACT:
$crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_OPPORTUNITY:
$crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_TASK:
$this->syncSingleTaskField($field);
return;
default:
return;
}
$this->syncFieldAction->execute($field, $crmField->toArray());
}
/**
* @param array<array{
* id:string,
* label:string,
* value?:string
* }> $options
*
* @throws CrmException
*
* @return FieldData[]
*
*/
public function importPicklistValues(
Field $field,
array $options = [['id' => '', 'label' => '', 'value' => '']],
): array {
if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {
// We already have the options, no need to fetch them again
return $this->importOptions($field, $options);
}
$options = [];
switch ($field->getObjectType()) {
case Field::OBJECT_ACCOUNT:
$options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());
break;
case Field::OBJECT_CONTACT:
$options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());
break;
case Field::OBJECT_OPPORTUNITY:
// Hubspot has different endpoint for stages
$options = $this->getClient()->fetchOpportunityFieldOptions($field);
break;
case Field::OBJECT_TASK:
if ($field->getCrmProviderId() === 'disposition') {
$options = $this->getClient()->fetchDispositionFieldOptions();
} elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {
$options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);
}
break;
default:
$this->logger->warning('Invalid object type', [
'object_type' => $field->getObjectType(),
'field_id' => $field->getId(),
]);
throw new CrmException('Invalid object type');
}
return $this->importOptions($field, $options);
}
/**
* @inheritdoc
*/
public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage
{
$missingStage = null;
try {
// Use the HubSpot API client instead of the SDK crmPipelines() method
$endpoint = self::getDealsPipelinesEndpoint();
$pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);
$pipelines = $pipelinesResponse->data->results;
} catch (RequestException|BadRequest $exception) {
throw $exception;
}
foreach ($pipelines as $pipeline) {
$stages = [];
// We create a business process to contain the pipeline, and store all stages against it.
$p = ResponseNormalize::normalizePipeline($pipeline);
// Create/update business process for this pipeline
$businessProcess = $this->config->businessProcesses()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'type' => BusinessProcess::TYPE_OPPORTUNITY,
'is_selectable' => $p['active'],
]);
// A record type is really a clone of the business process, used to store which record uses which pipeline.
// Create/update record type clone
$this->config->recordTypes()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'is_selectable' => $p['active'],
'business_process_id' => $businessProcess->id ?? null,
]);
// Stages - fetch all existing stages upfront to avoid N+1 queries
$existingStages = $this->config->stages()
->withTrashed()
->where('type', Stage::TYPE_OPPORTUNITY)
->get()
->keyBy('crm_provider_id');
foreach ($p['stages'] as $dealStage) {
$s = ResponseNormalize::normalizeDealStage($dealStage);
/** @var ?Stage $existingStage */
$existingStage = $existingStages->get($s['id']);
// Restore soft-deleted stages that are now active in HubSpot
if ($existingStage?->trashed() && $s['active']) {
$existingStage->restore();
}
// Upsert stage (updates soft-deleted records without restoring them)
$stage = $this->config->stages()->withTrashed()->updateOrCreate([
'crm_provider_id' => $s['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($s['label'], 0, 50),
'label' => mb_strimwidth($s['label'], 0, 191),
'type' => Stage::TYPE_OPPORTUNITY,
'sequence' => $s['displayOrder'],
'is_selectable' => $s['active'],
'probability' => $s['probability'] * 100,
]);
if ($missingStageName === $s['id']) {
$missingStage = $stage;
}
$stages[] = $stage->id;
}
$businessProcess->stages()->sync($stages);
}
return $missingStage;
}
/**
* @inheritdoc
*/
public function syncOrganization(): void
{
try {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function find(string $name, array $scopes): array
{
$count = $this->limit ?? 20;
$offset = $this->offset ?? 0;
/** @var array<int, array<string, mixed>> */
return Cache::remember(
key: $this->team->getId() . $name . $count . $offset,
ttl: 300,
callback: function () use ($name, $offset, $count): array {
$data = [];
// Use the new V3 API to find contacts based on additional fields.
foreach (['companies', 'contacts'] as $objectType) {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$ownerId = null;
if ($crmAccountId === null) {
return $data;
}
if ($userId) {
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
$ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
$closedStages = $this->getClosedDealStages();
$payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(
$this->config,
$crmAccountId,
$closedStages,
);
$results = $this->client->getPaginatedData($payload, 'deals');
foreach ($results['results'] as $object) {
$properties = $object['properties'];
$amount = null;
if (empty($properties['amount']) === false) {
$currency = $properties['deal_currency_code'] ?? $this->config->default_currency;
// Values can contain commas and any junk so strip them.
$value = (float) preg_replace('/[^\d.]/', '', $properties['amount']);
$amount = formatCurrency($value, $currency);
}
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
if ($businessProcess === null) {
// Import it.
$stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
} else {
$stage = $businessProcess
->stages()
->where('crm_provider_id', $properties['dealstage'])
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
if ($stage === null) {
// Import it.
$stage = $this->importStages(null, $properties['dealstage']);
}
}
$recordType = null;
if ($businessProcess) {
$recordType = $businessProcess->recordTypes()->first();
}
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$record = [
'crmId' => $object['id'],
'name' => $properties['dealname'] ?? 'Unknown Deal',
'value' => $amount,
'won' => $isWon,
'closed' => $isWon || $isLost,
'stage' => [
'id' => $stage?->getUuid() ?? '',
'name' => $stage?->getName() ?? '',
],
];
if ($recordType) {
$record += [
'recordType' => [
'id' => $recordType->id_string,
'name' => $recordType->name,
],
];
}
if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
}
/**
* @inheritdoc
*/
public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array
{
$data = [];
switch ($objectType) {
case 'contact':
$hsObject = 'contact';
break;
case 'account':
$hsObject = 'company';
break;
default:
// This is a hack to prioritise and override a contact/company with a deal.
if ($opportunityId) {
$hsObject = 'deal';
$objectId = $opportunityId;
} else {
throw new InvalidArgumentException('Object type not supported.');
}
}
$engagementTypes = ['meetings', 'tasks'];
foreach ($engagementTypes as $engagementType) {
$payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);
$this->logger->info('[HubSpot] CRM Search requested', [
'request' => $payload,
]);
$engagements = $this->client->getPaginatedData($payload, $engagementType);
foreach ($engagements['results'] as $engagement) {
if ($engagementType == 'meetings') {
$title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';
} elseif ($engagementType == 'tasks') {
$title = $engagement['properties']['hs_task_subject'];
} else {
$title = 'Scheduled meeting';
}
$data[] = [
'crmId' => $engagement['id'],
'subject' => $title,
'due' => $engagement['properties']['hs_timestamp'],
'type' => $engagement['properties']['hs_activity_type'] ?? null,
];
}
}
usort($data, function ($item1, $item2) {
return $item2['due'] <=> $item1['due'];
});
return $data;
}
/**
* Try to find CRM Objects using email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchExactlyByEmail(string $email, ?int $userId = null): ?array
{
$contactProperties = [
'email',
// 'firstname',
// 'lastname',
// 'country',
// 'phone',
// 'mobilephone',
// 'jobtitle',
// 'hubspot_owner_id',
// 'associatedcompanyid',
// 'photo',
];
$contact = null;
$account = null;
try {
$hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);
return null;
if ($hsContact) {
$contact = $this->importContact($hsContact);
$account = $contact->account;
}
$data = $this->convertCrmData($contact, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
} catch (BadRequest $e) {
$this->logger->warning('[HubSpot] Search failed', [
'team_id' => $this->team->getId(),
'search_identifier' => $email,
'reason' => $e->getMessage(),
]);
}
return null;
}
public function getDomain(string $email): ?string
{
return $this->getDomainFromEmail($email);
}
/**
* Try to find CRM objects using domain name of the email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByDomain(string $domain, ?int $userId = null): ?array
{
$companyName = $domain;
// Try to find a company matching their email domain.
$companyProperties = [
'country',
'phone',
'name',
'hs_avatar_filemanager_key',
'industry',
'hubspot_owner_id',
'domain',
];
try {
$hsAccounts = $this->client
->getInstance()
->companies()
->searchByDomain($companyName, $companyProperties);
} catch (Throwable $e) {
$this->logger->info('[HubSpot] Search failed', [
'error' => $e->getMessage(),
'domain' => $domain,
]);
return null;
}
$account = null;
// If there are multiple accounts, don't guess, we'll ask later.
if (\count($hsAccounts->data->results) === 1) {
// Persist this remote object.
$account = $this->syncAccount($hsAccounts->data->results[0]->companyId);
}
$data = $this->convertCrmData(null, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
}
/**
* @return array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array
{
$countryCode = null;
if ($contact && $contact->country_code) {
$countryCode = $contact->country_code;
} elseif ($account && $account->country_code) {
$countryCode = $account->country_code;
}
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact ? $contact->crm_provider_id : null,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
// If there are multiple opportunities, don't guess, we'll ask later.
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
protected function getCacheKey(string $object, ?int $userId = null): ?string
{
$key = $this->team->getId() . $object;
$keySuffix = $this->getOwnerKeySuffix($userId);
return $key . $keySuffix;
}
private function getOwnerKeySuffix(?int $userId = null): string
{
return $userId === null ? '' : (string) $userId;
}
/**
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
*}
*/
public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array
{
if (str_contains($phone, '**')) {
return null;
}
// trim all whitespaces if present so the lookup doesn't fail
$phone = str_replace(' ', '', $phone);
// Check if the user is internal.
if ($this->isPhoneNumberOfTeamMember($phone)) {
return null;
}
$response = $this->searchForPhoneNumber($phone);
if (empty($response)) {
return null;
}
// This would ideally importContact instead but the response type differs.
$contact = $this->findAndSyncContact($response['results'][0]['id']);
if (! $contact instanceof Contact) {
return null;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account?->crm_provider_id,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
try {
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
} catch (Exception $e) {
$this->logger->debug('[HubSpot] Opportunity failed to sync.', [
'reason' => $e->getMessage(),
]);
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
private function isPhoneNumberOfTeamMember(string $phone): bool
{
$teamRepository = app(TeamRepository::class);
$user = $teamRepository->findTeamMemberByPhone($this->team, $phone);
if ($user instanceof User) {
return true;
}
return false;
}
private function findAndSyncContact(string $crmId): ?Contact
{
try {
return $this->syncContact($crmId);
} catch (Exception $exception) {
$this->logger->info('[HubSpot] Phone match failed', [
'reason' => $exception->getMessage(),
]);
return null;
}
}
private function hasResults(array $response): bool
{
return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;
}
private function searchForPhoneNumber(string $phone): array
{
// Normalizes the provided phone number for the API search.
$normalizedPhone = $this->normalizePhoneNumber($phone);
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);
$this->logger->info('[HubSpot] Phone match search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);
if (! $this->hasResults($response)) {
$nationalPhone = preg_replace('/\D/', '', phone_national(null, $phone));
$payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);
$this->logger->info('[HubSpot] Phone match national number search triggered', [
'phone' => $phone,
'nationalPhone' => $nationalPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
if (! $this->hasResults($response)) {
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);
$this->logger->info('[HubSpot] Phone match alternative search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
return $this->hasResults($response) ? $response : [];
}
private function handlePhoneSearchRequest(string $phone, array $payload): array
{
$endpoint = '[URL_WITH_CREDENTIALS] null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByName(string $name, ?int $userId = null): ?array
{
// Don't waste time searching for single character strings.
if (\strlen($name) <= 1) {
return null;
}
$cacheKey = $this->getCacheKey($name, $userId);
$result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {
$payload = $this->payloadBuilder->generateSearchContactsByNamePayload(
$name,
$this->getContactFields()
);
$hsContacts = $this->client->getPaginatedData($payload, 'contact');
if (empty($hsContacts['results'])) {
return false;
}
$contact = $this->importContact($hsContacts['results'][0]);
if ($contact === null) {
return false;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
});
return is_array($result) ? $result : null;
}
private function convertActivityAssociations(Activity $activity): array
{
return [
'contactIds' => $this->getParticipantsIds($activity),
'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],
'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],
'ownerIds' => [],
];
}
private function getParticipantsIds(Activity $activity): array
{
$attendees = [];
$participantRepository = app(ParticipantRepository::class);
$participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);
foreach ($participants as $participant) {
if ($participant->user_id || $participant->isCoach()) {
continue;
}
$contact = $participant->contact()->first();
if ($contact && $contact->crm_provider_id) {
$attendees[] = $contact->crm_provider_id;
} else {
if (! empty($participant->name)) {
$attendeeData = $this->fetchMissingAttendeeInfo($participant);
}
if (! empty($attendeeData['id'])) {
$attendees[] = $attendeeData['id'];
}
}
}
if ($activity->hasContact()) {
$attendees[] = $activity->contact->crm_provider_id;
}
return array_unique($attendees);
}
private function fetchMissingAttendeeInfo(Participant $participant): array
{
// Check if we need to look inside an account context.
$activity = $participant->getActivity();
$companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;
// First check the local data.
/** @var Contact[] $contacts */
$contacts = $this->team->contacts()
->with('account')
->where('name', $participant->name)
->whereNotNull('email')
->get();
foreach ($contacts as $contact) {
// If we have a company in scope, check the contact is associated to it.
if (
$companyId !== null
&& ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)
) {
continue;
}
return [
'id' => $contact->crm_provider_id,
'email' => $contact->email,
];
}
$payload = $this->generateNameSearchPayload($participant->name, 0, 20);
try {
$response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);
// TODO add some logic to choose the most suitable contact if multiple
foreach ($response['results'] as $object) {
$properties = $object['properties'];
if (empty($object['properties']) === false) {
// Check the company matches the contact.
// Todo: Move this check inside the API search.
if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {
continue;
}
return [
'id' => $object['id'],
'email' => $properties['email'],
];
}
}
} catch (Exception $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [
'teamId' => $this->team->id_string,
'request' => $payload,
'reason' => $e->getMessage(),
]);
}
return [];
}
/**
* Store transcripts as note engagement.
*
* @throws Exception
*/
public function createTranscriptNotes(Activity $activity): void
{
// For HS no need to...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.68484044,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.69348407,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"bounds":{"left":0.7044548,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"bounds":{"left":0.7130984,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"bounds":{"left":0.72174203,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"bounds":{"left":0.73038566,"top":0.07821229,"width":0.032247342,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"bounds":{"left":0.76263297,"top":0.07821229,"width":0.023271276,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"bounds":{"left":0.7859042,"top":0.07821229,"width":0.022938829,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"bounds":{"left":0.8088431,"top":0.08220271,"width":0.0019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring start {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring end {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}","depth":4,"bounds":{"left":0.52859044,"top":0.10454908,"width":0.47140956,"height":0.8747007},"on_screen":true,"lines":[{"char_start":918,"char_count":324,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":1242,"char_count":203,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":1445,"char_count":378,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":1823,"char_count":326,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":2149,"char_count":380,"bounds":{"left":0.53025264,"top":0.0,"width":0.46974736,"height":0.014365523}},{"char_start":2529,"char_count":162,"bounds":{"left":0.53025264,"top":0.0,"width":0.41722074,"height":0.014365523}},{"char_start":2691,"char_count":160,"bounds":{"left":0.53025264,"top":0.015961692,"width":0.41223404,"height":0.014365523}},{"char_start":2851,"char_count":326,"bounds":{"left":0.53025264,"top":0.033519555,"width":0.46974736,"height":0.014365523}},{"char_start":3177,"char_count":378,"bounds":{"left":0.53025264,"top":0.051077414,"width":0.46974736,"height":0.014365523}}],"value":"[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring start {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring end {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.46176863,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"51","depth":4,"bounds":{"left":0.47174203,"top":0.19952115,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.48337767,"top":0.19952115,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"33","depth":4,"bounds":{"left":0.49268618,"top":0.19952115,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.5049867,"top":0.19952115,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse Carbon\\Carbon;\nuse Exception;\nuse Generator;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Illuminate\\Support\\Facades\\Cache;\nuse InvalidArgumentException;\nuse Jiminny\\Contracts\\Repositories\\TeamRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\HubspotInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SavePlaybackLinkToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\VerifyTaskExistsInterface;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\HttpNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Participant;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Repositories\\Crm\\FieldRepository;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\ParticipantRepository;\nuse Jiminny\\Services\\Avatar\\ProspectPhotoPathService;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\Hubspot\\Actions\\SyncArchivedProfilesAction;\nuse Jiminny\\Services\\Crm\\Hubspot\\Fields\\ValueNormalizer;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\OpportunitySyncTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncFieldsTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\WriteCrmTrait;\nuse Jiminny\\Services\\Crm\\MatchDomainByEmailInterface;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Services\\Crm\\ResolveCompanyNameByEmailTrait;\nuse Jiminny\\Utils\\PlaybackUrlBuilder;\nuse Sentry;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse Throwable;\nuse UnexpectedValueException;\n\n/**\n * @phpstan-type CrmFieldDefinition array{\n * name: string,\n * label: string,\n * description: string,\n * type: string,\n * fieldType: string,\n * hidden: bool,\n * showCurrencySymbol: bool,\n * options: array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }\n */\nclass Service extends BaseService implements\n HubspotInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n SendSummaryToCrmInterface,\n MatchDomainByEmailInterface,\n SavePlaybackLinkToCrmInterface,\n RemoteEntityManipulationInterface,\n FetchRelatedActivityInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n VerifyTaskExistsInterface\n{\n use ResolveCompanyNameByEmailTrait;\n use SyncCrmEntitiesTrait;\n use WriteCrmTrait;\n use SyncFieldsTrait;\n use OpportunitySyncTrait;\n\n private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;\n\n private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';\n private const int BATCH_UPDATE_LIMIT = 100;\n private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';\n private const int TEN_SECONDLY_ROLLING_LIMIT = 10;\n private const string CALLS_SEARCH_ENDPOINT = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n\n private const string TYPE_NOTE = 'NOTE';\n\n private const string TYPE_MEETING = 'MEETING';\n\n private const string TYPE_CALL = 'CALL';\n\n private const string API_URL = 'https://api.hubapi.com';\n\n // NB: v1 is legacy - v3 is the newest\n private const string ENDPOINT_PIPELINES = '/crm-pipelines/v1/pipelines/';\n private const string PIPELINE_OBJECT_TYPE_DEALS = 'deals';\n\n private const int TASK_VERIFICATION_CACHE_TTL = 86400; // 1 day\n\n /**\n * @var ClientInterface|Client\n */\n protected $client;\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected ProspectPhotoPathService $prospectPhotoPathService;\n\n private SyncFieldAction $syncFieldAction;\n private PayloadBuilder $payloadBuilder;\n private SyncRelatedActivityManager $syncRelatedActivityManager;\n private SyncArchivedProfilesAction $syncArchivedProfilesAction;\n private WebhookSyncBatchProcessor $batchProcessor;\n\n public function __construct(\n Client $client,\n SyncFieldAction $syncFieldAction,\n PayloadBuilder $payloadBuilder,\n ProspectPhotoPathService $prospectPhotoPathService,\n SyncArchivedProfilesAction $syncArchivedProfilesAction,\n WebhookSyncBatchProcessor $batchProcessor,\n ) {\n parent::__construct();\n\n $this->client = $client;\n $this->syncFieldAction = $syncFieldAction;\n $this->prospectPhotoPathService = $prospectPhotoPathService;\n $this->payloadBuilder = $payloadBuilder;\n $this->syncArchivedProfilesAction = $syncArchivedProfilesAction;\n $this->batchProcessor = $batchProcessor;\n $this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [\n 'client' => $this->client,\n ]);\n $this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [\n 'client' => $this->client,\n 'payloadBuilder' => $this->payloadBuilder,\n 'logger' => $this->logger,\n ]);\n $this->crmEntityRepository = app(CrmEntityRepository::class);\n $this->dealFieldsService = app(DealFieldsService::class);\n }\n\n public function getDisplayName(): string\n {\n return 'HubSpot';\n }\n\n protected function getOAuthAccount(User $user): ?SocialAccount\n {\n // In this case, the Account Owner is always the connection for any API operations.\n $owner = $user->team->owner;\n\n return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);\n }\n\n public function getClient(): Client\n {\n /** @var Client */\n return $this->client;\n }\n\n /**\n * Convert raw field data into a format compatible with CRM APIs.\n *\n * @param bool $internal Direction of the conversion.\n * True is pulling from CRM, false normalize before sending to CRM.\n */\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return ValueNormalizer::normalize(\n fieldType: $fieldType,\n fieldValue: $fieldValue,\n isInbound: $internal,\n );\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultFields(string $activityType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n $defaultFields = FieldDefinitions::defaultTaskFields();\n\n // This lazy creates these fields if not already setup.\n foreach ($defaultFields as $defaultField) {\n $fields[] = $this->config->fields()->firstOrCreate($defaultField);\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityField(string $activityType): Field\n {\n /** @var Field $activityField */\n $activityField = $this->config->fields()->where([\n 'crm_provider_id' => 'activityType',\n 'object_type' => $activityType,\n ])->first();\n\n return $activityField;\n }\n\n /**\n * @inheritdoc\n */\n public function getSupportedPlaybookTypes(): array\n {\n return [Playbook::ACTIVITY_TYPE_TASK];\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n // Outcome should always be provided calls/meetings.\n $fieldData = [\n [\n 'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',\n 'object_type' => Field::OBJECT_TASK,\n ],\n ];\n\n foreach ($fieldData as $data) {\n $field = $this->config->fields()->where($data)->first();\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n }\n\n return $fields;\n }\n\n public function getDealInsightsFields(): array\n {\n return FieldDefinitions::dealInsightsFields();\n }\n\n protected function getDefaultFollowupLayoutFields(string $activityType): array\n {\n $fields = [];\n $fieldRepo = app(FieldRepository::class);\n $fieldData = FieldDefinitions::followupFieldsFilter();\n\n foreach ($fieldData as $data) {\n $field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function syncField(Field $field): void\n {\n switch ($field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_CONTACT:\n $crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_OPPORTUNITY:\n $crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_TASK:\n $this->syncSingleTaskField($field);\n\n return;\n default:\n return;\n }\n\n $this->syncFieldAction->execute($field, $crmField->toArray());\n }\n\n /**\n * @param array<array{\n * id:string,\n * label:string,\n * value?:string\n * }> $options\n *\n * @throws CrmException\n *\n * @return FieldData[]\n *\n */\n public function importPicklistValues(\n Field $field,\n array $options = [['id' => '', 'label' => '', 'value' => '']],\n ): array {\n if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {\n // We already have the options, no need to fetch them again\n return $this->importOptions($field, $options);\n }\n\n $options = [];\n\n switch ($field->getObjectType()) {\n case Field::OBJECT_ACCOUNT:\n $options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_CONTACT:\n $options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n // Hubspot has different endpoint for stages\n $options = $this->getClient()->fetchOpportunityFieldOptions($field);\n\n break;\n\n case Field::OBJECT_TASK:\n if ($field->getCrmProviderId() === 'disposition') {\n $options = $this->getClient()->fetchDispositionFieldOptions();\n } elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {\n $options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);\n }\n\n break;\n\n default:\n $this->logger->warning('Invalid object type', [\n 'object_type' => $field->getObjectType(),\n 'field_id' => $field->getId(),\n ]);\n\n throw new CrmException('Invalid object type');\n }\n\n return $this->importOptions($field, $options);\n }\n\n /**\n * @inheritdoc\n */\n public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage\n {\n $missingStage = null;\n\n try {\n // Use the HubSpot API client instead of the SDK crmPipelines() method\n $endpoint = self::getDealsPipelinesEndpoint();\n $pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);\n $pipelines = $pipelinesResponse->data->results;\n } catch (RequestException|BadRequest $exception) {\n throw $exception;\n }\n\n foreach ($pipelines as $pipeline) {\n $stages = [];\n\n // We create a business process to contain the pipeline, and store all stages against it.\n $p = ResponseNormalize::normalizePipeline($pipeline);\n\n // Create/update business process for this pipeline\n $businessProcess = $this->config->businessProcesses()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'type' => BusinessProcess::TYPE_OPPORTUNITY,\n 'is_selectable' => $p['active'],\n ]);\n\n // A record type is really a clone of the business process, used to store which record uses which pipeline.\n // Create/update record type clone\n $this->config->recordTypes()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'is_selectable' => $p['active'],\n 'business_process_id' => $businessProcess->id ?? null,\n ]);\n\n // Stages - fetch all existing stages upfront to avoid N+1 queries\n $existingStages = $this->config->stages()\n ->withTrashed()\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->get()\n ->keyBy('crm_provider_id');\n\n foreach ($p['stages'] as $dealStage) {\n $s = ResponseNormalize::normalizeDealStage($dealStage);\n\n /** @var ?Stage $existingStage */\n $existingStage = $existingStages->get($s['id']);\n\n // Restore soft-deleted stages that are now active in HubSpot\n if ($existingStage?->trashed() && $s['active']) {\n $existingStage->restore();\n }\n\n // Upsert stage (updates soft-deleted records without restoring them)\n $stage = $this->config->stages()->withTrashed()->updateOrCreate([\n 'crm_provider_id' => $s['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($s['label'], 0, 50),\n 'label' => mb_strimwidth($s['label'], 0, 191),\n 'type' => Stage::TYPE_OPPORTUNITY,\n 'sequence' => $s['displayOrder'],\n 'is_selectable' => $s['active'],\n 'probability' => $s['probability'] * 100,\n ]);\n\n if ($missingStageName === $s['id']) {\n $missingStage = $stage;\n }\n\n $stages[] = $stage->id;\n }\n\n $businessProcess->stages()->sync($stages);\n }\n\n return $missingStage;\n }\n\n /**\n * @inheritdoc\n */\n public function syncOrganization(): void\n {\n try {\n $endpoint = 'https://api.hubapi.com/integrations/v1/me';\n $response = $this->client->getInstance()->getClient()->request('get', $endpoint);\n\n $accountData = $response->data;\n $this->config->update(['default_currency' => $accountData->currency]);\n } catch (BadRequest $e) {\n throw new CrmException('Could not sync the organization.', $e->getCode(), $e);\n }\n }\n\n /**\n * @inheritdoc\n *\n * @throws CrmException\n */\n public function syncProfiles(?User $userToSearch = null): ?Profile\n {\n $this->syncArchivedProfilesAction->execute($this->team, $this->client, $this->config);\n\n try {\n $owners = $this->client->getOwners();\n } catch (\\HubSpot\\Client\\Crm\\Owners\\ApiException $e) {\n $this->logger->error('[HubSpot] Could not sync the profiles.', [\n 'team_id' => $this->team->getId(),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new CrmException('Could not sync the profiles.', $e->getCode(), $e);\n }\n\n $profileRepository = app(ProfileRepository::class);\n $teamRepository = app(TeamRepository::class);\n\n foreach ($owners as $owner) {\n if ($owner->getArchived()) {\n // not supposed to fetch archived, but log anyway\n $this->logger->warning('[HubSpot] Found archived owner', [\n 'crm_provider_id' => $owner->getId(),\n 'email' => $owner->getEmail(),\n ]);\n\n continue;\n }\n\n $email = $owner->getEmail();\n if ($email === null) {\n continue;\n }\n\n $user = $teamRepository->findActiveTeamMemberByEmail($this->team, $email);\n\n if (! $user instanceof User) {\n continue;\n }\n\n $profile = $profileRepository->updateOrCreateProfile($user, [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $owner->getId(),\n ]);\n\n if ($userToSearch && $userToSearch->getId() === $user->getId()) {\n return $profile;\n }\n }\n\n return null;\n }\n\n private function generateNameSearchPayload(string $name, int $offset, int $limit): array\n {\n $payload = [\n 'query' => $name,\n 'sorts' => [\n [\n 'propertyName' => 'modifieddate',\n 'direction' => 'DESCENDING',\n ],\n ],\n 'properties' => [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n 'industry',\n 'name',\n 'company',\n ],\n 'limit' => $limit,\n 'after' => $offset,\n ];\n\n $this->logger->debug('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n return $payload;\n }\n\n /**\n * @inheritdoc\n */\n public function find(string $name, array $scopes): array\n {\n $count = $this->limit ?? 20;\n $offset = $this->offset ?? 0;\n\n /** @var array<int, array<string, mixed>> */\n return Cache::remember(\n key: $this->team->getId() . $name . $count . $offset,\n ttl: 300,\n callback: function () use ($name, $offset, $count): array {\n $data = [];\n\n // Use the new V3 API to find contacts based on additional fields.\n foreach (['companies', 'contacts'] as $objectType) {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/' . $objectType . '/search';\n $payload = $this->generateNameSearchPayload($name, $offset, $count);\n $type = $objectType === 'companies' ? 'account' : 'contact';\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, [\n 'json' => $payload,\n ]);\n\n // Build mapped list.\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n\n $objectName = $this->buildContactName($properties);\n\n $record = [\n 'crmId' => $object['id'],\n // Pass crmUrl to the FE, needed for success message in the extension when you log activity.\n 'crmUrl' => $this->generateProviderUrl($object['id'], $type),\n 'name' => $objectName,\n 'prospectType' => $type,\n 'phoneNumbers' => [],\n ];\n\n if ($type === 'account') {\n $record['industry'] = $properties['industry'] ?? null;\n } else {\n $record['title'] = $properties['jobtitle'] ?? null;\n $record['organization'] = $properties['company'] ?? null;\n }\n\n $countryCode = $this->buildContactCountry($properties);\n $parsedNumber = $this->buildContactPhone($countryCode, $properties);\n\n // Add phone number to record.\n if (! empty($parsedNumber['phone'])) {\n $record['phoneNumbers'][] = [\n 'number' => $parsedNumber['phone'],\n 'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),\n 'type' => 'phone',\n ];\n }\n\n // Add mobile phone number to record.\n if (! empty($properties['mobilephone'])) {\n $mobileNumber = phone_e164($countryCode, $properties['mobilephone']);\n if ($mobileNumber !== null) {\n $record['phoneNumbers'][] = [\n 'number' => $mobileNumber,\n 'nationalFormat' => phone_national($countryCode, $mobileNumber),\n 'type' => 'mobile',\n ];\n }\n }\n\n $data[] = $record;\n }\n } catch (BadRequest $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->getUuid(),\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n }\n\n return $data;\n },\n );\n }\n\n\n /**\n * @inheritdoc\n */\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n $ownerId = null;\n\n if ($crmAccountId === null) {\n return $data;\n }\n\n if ($userId) {\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n $ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n $closedStages = $this->getClosedDealStages();\n $payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(\n $this->config,\n $crmAccountId,\n $closedStages,\n );\n\n $results = $this->client->getPaginatedData($payload, 'deals');\n\n foreach ($results['results'] as $object) {\n $properties = $object['properties'];\n\n $amount = null;\n if (empty($properties['amount']) === false) {\n $currency = $properties['deal_currency_code'] ?? $this->config->default_currency;\n\n // Values can contain commas and any junk so strip them.\n $value = (float) preg_replace('/[^\\d.]/', '', $properties['amount']);\n $amount = formatCurrency($value, $currency);\n }\n\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n\n if ($businessProcess === null) {\n // Import it.\n $stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n } else {\n $stage = $businessProcess\n ->stages()\n ->where('crm_provider_id', $properties['dealstage'])\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n if ($stage === null) {\n // Import it.\n $stage = $this->importStages(null, $properties['dealstage']);\n }\n }\n\n $recordType = null;\n if ($businessProcess) {\n $recordType = $businessProcess->recordTypes()->first();\n }\n\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $record = [\n 'crmId' => $object['id'],\n 'name' => $properties['dealname'] ?? 'Unknown Deal',\n 'value' => $amount,\n 'won' => $isWon,\n 'closed' => $isWon || $isLost,\n 'stage' => [\n 'id' => $stage?->getUuid() ?? '',\n 'name' => $stage?->getName() ?? '',\n ],\n ];\n\n if ($recordType) {\n $record += [\n 'recordType' => [\n 'id' => $recordType->id_string,\n 'name' => $recordType->name,\n ],\n ];\n }\n\n if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n }\n\n /**\n * @inheritdoc\n */\n public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array\n {\n $data = [];\n switch ($objectType) {\n case 'contact':\n $hsObject = 'contact';\n\n break;\n case 'account':\n $hsObject = 'company';\n\n break;\n default:\n // This is a hack to prioritise and override a contact/company with a deal.\n if ($opportunityId) {\n $hsObject = 'deal';\n $objectId = $opportunityId;\n } else {\n throw new InvalidArgumentException('Object type not supported.');\n }\n }\n\n $engagementTypes = ['meetings', 'tasks'];\n\n foreach ($engagementTypes as $engagementType) {\n $payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);\n\n $this->logger->info('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n $engagements = $this->client->getPaginatedData($payload, $engagementType);\n\n foreach ($engagements['results'] as $engagement) {\n if ($engagementType == 'meetings') {\n $title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';\n } elseif ($engagementType == 'tasks') {\n $title = $engagement['properties']['hs_task_subject'];\n } else {\n $title = 'Scheduled meeting';\n }\n\n $data[] = [\n 'crmId' => $engagement['id'],\n 'subject' => $title,\n 'due' => $engagement['properties']['hs_timestamp'],\n 'type' => $engagement['properties']['hs_activity_type'] ?? null,\n ];\n }\n }\n\n usort($data, function ($item1, $item2) {\n return $item2['due'] <=> $item1['due'];\n });\n\n return $data;\n }\n\n /**\n * Try to find CRM Objects using email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchExactlyByEmail(string $email, ?int $userId = null): ?array\n {\n $contactProperties = [\n 'email',\n// 'firstname',\n// 'lastname',\n// 'country',\n// 'phone',\n// 'mobilephone',\n// 'jobtitle',\n// 'hubspot_owner_id',\n// 'associatedcompanyid',\n// 'photo',\n ];\n $contact = null;\n $account = null;\n\n try {\n $hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);\n return null;\n\n if ($hsContact) {\n $contact = $this->importContact($hsContact);\n $account = $contact->account;\n }\n\n $data = $this->convertCrmData($contact, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n } catch (BadRequest $e) {\n $this->logger->warning('[HubSpot] Search failed', [\n 'team_id' => $this->team->getId(),\n 'search_identifier' => $email,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return null;\n }\n\n public function getDomain(string $email): ?string\n {\n return $this->getDomainFromEmail($email);\n }\n\n /**\n * Try to find CRM objects using domain name of the email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByDomain(string $domain, ?int $userId = null): ?array\n {\n $companyName = $domain;\n\n // Try to find a company matching their email domain.\n $companyProperties = [\n 'country',\n 'phone',\n 'name',\n 'hs_avatar_filemanager_key',\n 'industry',\n 'hubspot_owner_id',\n 'domain',\n ];\n\n try {\n $hsAccounts = $this->client\n ->getInstance()\n ->companies()\n ->searchByDomain($companyName, $companyProperties);\n } catch (Throwable $e) {\n $this->logger->info('[HubSpot] Search failed', [\n 'error' => $e->getMessage(),\n 'domain' => $domain,\n ]);\n\n return null;\n }\n\n $account = null;\n // If there are multiple accounts, don't guess, we'll ask later.\n if (\\count($hsAccounts->data->results) === 1) {\n // Persist this remote object.\n $account = $this->syncAccount($hsAccounts->data->results[0]->companyId);\n }\n\n $data = $this->convertCrmData(null, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n }\n\n /**\n * @return array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array\n {\n $countryCode = null;\n if ($contact && $contact->country_code) {\n $countryCode = $contact->country_code;\n } elseif ($account && $account->country_code) {\n $countryCode = $account->country_code;\n }\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact ? $contact->crm_provider_id : null,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n // If there are multiple opportunities, don't guess, we'll ask later.\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n protected function getCacheKey(string $object, ?int $userId = null): ?string\n {\n $key = $this->team->getId() . $object;\n $keySuffix = $this->getOwnerKeySuffix($userId);\n\n return $key . $keySuffix;\n }\n\n private function getOwnerKeySuffix(?int $userId = null): string\n {\n return $userId === null ? '' : (string) $userId;\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n *}\n */\n public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array\n {\n if (str_contains($phone, '**')) {\n return null;\n }\n\n // trim all whitespaces if present so the lookup doesn't fail\n $phone = str_replace(' ', '', $phone);\n\n // Check if the user is internal.\n if ($this->isPhoneNumberOfTeamMember($phone)) {\n return null;\n }\n\n $response = $this->searchForPhoneNumber($phone);\n if (empty($response)) {\n return null;\n }\n\n // This would ideally importContact instead but the response type differs.\n $contact = $this->findAndSyncContact($response['results'][0]['id']);\n if (! $contact instanceof Contact) {\n return null;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account?->crm_provider_id,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n\n try {\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n } catch (Exception $e) {\n $this->logger->debug('[HubSpot] Opportunity failed to sync.', [\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n private function isPhoneNumberOfTeamMember(string $phone): bool\n {\n $teamRepository = app(TeamRepository::class);\n $user = $teamRepository->findTeamMemberByPhone($this->team, $phone);\n\n if ($user instanceof User) {\n return true;\n }\n\n return false;\n }\n\n private function findAndSyncContact(string $crmId): ?Contact\n {\n try {\n return $this->syncContact($crmId);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'reason' => $exception->getMessage(),\n ]);\n\n return null;\n }\n }\n\n private function hasResults(array $response): bool\n {\n return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;\n }\n\n private function searchForPhoneNumber(string $phone): array\n {\n // Normalizes the provided phone number for the API search.\n $normalizedPhone = $this->normalizePhoneNumber($phone);\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);\n\n $this->logger->info('[HubSpot] Phone match search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);\n\n if (! $this->hasResults($response)) {\n $nationalPhone = preg_replace('/\\D/', '', phone_national(null, $phone));\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);\n\n $this->logger->info('[HubSpot] Phone match national number search triggered', [\n 'phone' => $phone,\n 'nationalPhone' => $nationalPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n if (! $this->hasResults($response)) {\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);\n\n $this->logger->info('[HubSpot] Phone match alternative search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n return $this->hasResults($response) ? $response : [];\n }\n\n private function handlePhoneSearchRequest(string $phone, array $payload): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/contacts/search';\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n $endpoint,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'phone' => $phone,\n 'reason' => $exception->getMessage(),\n ]);\n\n return [];\n }\n\n $this->logger->info('[HubSpot] Phone match completed', [\n 'phone' => $phone,\n 'response' => $response,\n ]);\n\n return $response->toArray();\n }\n\n private function normalizePhoneNumber(string $phone): string\n {\n return ltrim(phone_e164(null, $phone), '+0');\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByName(string $name, ?int $userId = null): ?array\n {\n // Don't waste time searching for single character strings.\n if (\\strlen($name) <= 1) {\n return null;\n }\n\n $cacheKey = $this->getCacheKey($name, $userId);\n\n $result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {\n $payload = $this->payloadBuilder->generateSearchContactsByNamePayload(\n $name,\n $this->getContactFields()\n );\n\n $hsContacts = $this->client->getPaginatedData($payload, 'contact');\n if (empty($hsContacts['results'])) {\n return false;\n }\n\n $contact = $this->importContact($hsContacts['results'][0]);\n if ($contact === null) {\n return false;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n });\n\n return is_array($result) ? $result : null;\n }\n\n\n private function convertActivityAssociations(Activity $activity): array\n {\n return [\n 'contactIds' => $this->getParticipantsIds($activity),\n 'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],\n 'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],\n 'ownerIds' => [],\n ];\n }\n\n private function getParticipantsIds(Activity $activity): array\n {\n $attendees = [];\n\n $participantRepository = app(ParticipantRepository::class);\n $participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);\n foreach ($participants as $participant) {\n if ($participant->user_id || $participant->isCoach()) {\n continue;\n }\n\n $contact = $participant->contact()->first();\n if ($contact && $contact->crm_provider_id) {\n $attendees[] = $contact->crm_provider_id;\n } else {\n if (! empty($participant->name)) {\n $attendeeData = $this->fetchMissingAttendeeInfo($participant);\n }\n if (! empty($attendeeData['id'])) {\n $attendees[] = $attendeeData['id'];\n }\n }\n }\n\n if ($activity->hasContact()) {\n $attendees[] = $activity->contact->crm_provider_id;\n }\n\n return array_unique($attendees);\n }\n\n private function fetchMissingAttendeeInfo(Participant $participant): array\n {\n // Check if we need to look inside an account context.\n $activity = $participant->getActivity();\n $companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;\n\n // First check the local data.\n /** @var Contact[] $contacts */\n $contacts = $this->team->contacts()\n ->with('account')\n ->where('name', $participant->name)\n ->whereNotNull('email')\n ->get();\n\n foreach ($contacts as $contact) {\n // If we have a company in scope, check the contact is associated to it.\n if (\n $companyId !== null\n && ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)\n ) {\n continue;\n }\n\n return [\n 'id' => $contact->crm_provider_id,\n 'email' => $contact->email,\n ];\n }\n\n $payload = $this->generateNameSearchPayload($participant->name, 0, 20);\n\n try {\n $response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);\n\n // TODO add some logic to choose the most suitable contact if multiple\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n if (empty($object['properties']) === false) {\n // Check the company matches the contact.\n // Todo: Move this check inside the API search.\n if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {\n continue;\n }\n\n return [\n 'id' => $object['id'],\n 'email' => $properties['email'],\n ];\n }\n }\n } catch (Exception $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->id_string,\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [];\n }\n\n /**\n * Store transcripts as note engagement.\n *\n * @throws Exception\n */\n public function createTranscriptNotes(Activity $activity): void\n {\n // For HS no need to check if Crm profile - Log Notes field is enabled\n // We only check if store_transcript toggle is enabled on crm profile.\n $engagement = [\n 'active' => true,\n 'ownerId' => $this->profile->crm_provider_id,\n 'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,\n 'type' => 'NOTE',\n ];\n\n // Generate activity transcription.\n $transcriptionData = $this->generateTranscription($activity);\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);\n\n $metadata = [\n 'body' => $transcripts,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsEngagement = $this->client\n ->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $noteId = $hsEngagement->data->engagement->id;\n\n // Store crm logged id in transcription.\n $transcription = $activity->getTranscription();\n $transcription->crm_activity_id = $noteId;\n $transcription->save();\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $payload = [\n 'properties' => $data,\n ];\n\n try {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n $this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);\n\n break;\n case FieldData::OBJECT_CONTACT:\n $this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_ACCOUNT:\n $this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_TASK:\n // Endpoint for Engagements not ready\n $engagements = [\n 'type' => 'TASK',\n ];\n $metadata = $data;\n $this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $objectId],\n $metadata,\n );\n\n break;\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $apiException) {\n $errorMessage = $apiException->getMessage();\n if ($apiException->getResponseBody()) {\n $responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);\n $errorMessage = $responseBody['message'] ?? $apiException->getMessage();\n }\n\n $this->logger->error(\n '[HubSpot] Update record failed',\n [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'payload' => $payload,\n 'reason' => $errorMessage,\n 'team' => $this->team->getUuid(),\n ]\n );\n\n throw new CrmException($errorMessage);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n return $this->client->getInstance()->deals()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_CONTACT:\n return $this->client->getInstance()->contacts()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_ACCOUNT:\n return $this->client->getInstance()->companies()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_TASK:\n return $this->client->getInstance()->engagements()->get($objectId)->toArray();\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n }\n\n /**\n * @throws BadRequest\n * @throws CrmException\n */\n public function updateStage($crmObject, Stage $stage): void\n {\n $payload = [\n 'properties' => [\n [\n 'name' => 'dealstage',\n 'value' => $stage->crm_provider_id,\n ],\n ],\n ];\n\n try {\n $this->client->getInstance()->deals()->update($crmObject->crm_provider_id, $payload);\n } catch (BadRequest $badRequest) {\n if ($badRequest->getCode() === 403) {\n throw new CrmException(\n \"Sorry, you don't have permission to update this stage.\",\n $badRequest->getCode(),\n $badRequest,\n );\n }\n\n $this->logger->warning('[HubSpot] Stage update failed', [\n 'dealId' => $crmObject->crm_provider_id,\n 'payload' => $payload,\n 'message' => $badRequest->getMessage(),\n ]);\n\n throw $badRequest;\n }\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n $url = null;\n $baseUrl = 'https://app.hubspot.com/contacts/' . $this->config->crm_provider_id . '/';\n\n switch ($objectType) {\n case 'account':\n $url = $baseUrl . 'company/' . $providerId;\n\n break;\n\n case 'contact':\n $url = $baseUrl . 'contact/' . $providerId;\n\n break;\n\n case 'opportunity':\n $url = $baseUrl . 'deal/' . $providerId;\n\n break;\n\n case 'task':\n case 'activity':\n return null;\n\n // This should not be deep-linked as per JMNY-3934.\n //$url = $baseUrl.'tasks/list/view/all/?taskId='.$providerId;\n break;\n }\n\n return $url;\n }\n\n public function searchCalls(Carbon $from, Carbon $to, string $activityProvider): array\n {\n $this->logger->info('[HubSpot] Search calls', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $calls = [];\n $page = 1;\n\n do {\n try {\n $payload = $this->payloadBuilder->generateGetCallsPayload($from, $to, $activityProvider, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n $calls = array_merge($calls, $responseResults);\n $page++;\n } while (! empty($responseResults));\n\n return $calls;\n }\n\n public function searchCallsForPeriodByPage(Carbon $from, Carbon $to, int $page, bool $retry = true)\n {\n try {\n $payload = $this->payloadBuilder->generateSearchCallsByPeriodPayload($from, $to, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls for period failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallsForPeriodByPage($from, $to, $page, false);\n }\n $response = null;\n }\n\n return $response;\n }\n\n public function searchCallsForPeriod(Carbon $from, Carbon $to): Generator\n {\n $this->logger->info('[HubSpot] Search calls for period', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $page = 1;\n\n do {\n $response = $this->searchCallsForPeriodByPage($from, $to, $page);\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n\n $associationContacts = $this->getAssociationDataForCollection($responseResults, 'calls', 'contacts');\n $associationCompanies = $this->getAssociationDataForCollection($responseResults, 'calls', 'companies');\n $associationDeals = $this->getAssociationDataForCollection($responseResults, 'calls', 'deals');\n\n foreach ($responseResults as $call) {\n $call['associations'] = [\n 'contacts' => $this->importAssociationData($call, $associationContacts),\n 'companies' => $this->importAssociationData($call, $associationCompanies),\n 'deals' => $this->importAssociationData($call, $associationDeals),\n ];\n\n yield $call;\n }\n $page++;\n } while (! empty($responseResults));\n }\n\n public function getCall(string $callId): array\n {\n $this->logger->info('[HubSpot] Get call', [\n 'call_id' => $callId,\n ]);\n\n $searchAttributes = $this->payloadBuilder->getSearchCallAttributes();\n $endpoint = sprintf(\n 'https://api.hubapi.com/crm/v3/objects/calls/%s',\n $callId,\n );\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'GET',\n $endpoint,\n [],\n sprintf(\n 'properties=%s&associations=contacts,companies,deals',\n implode(',', $searchAttributes),\n ),\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Get call failed', [\n 'call_id' => $callId,\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n return empty($response) ? [] : $response->toArray();\n }\n\n public function bulkAddPlaybackURLToDescription(array $crmUpdateData): array\n {\n $crmUpdateBatches = array_chunk($crmUpdateData, self::BATCH_UPDATE_LIMIT);\n\n $updatedCrmIds = [];\n\n foreach ($crmUpdateBatches as $crmBatch) {\n $payload = $this->payloadBuilder->generatePlaybackAddUrlBatchPayload($crmBatch);\n $updateSuccess = $this->bulkAddPlaybackURLToDescriptionRequest($payload);\n if ($updateSuccess) {\n $updatedCrmIds = array_merge($updatedCrmIds, array_column($crmBatch, 'crm_id'));\n }\n }\n\n return $updatedCrmIds;\n }\n\n private function bulkAddPlaybackURLToDescriptionRequest(array $payload, bool $retry = true): bool\n {\n try {\n $this->client->getNewInstance()->crm()->objects()->batchApi()->update('calls', $payload);\n\n return true;\n } catch (\\HubSpot\\Client\\Crm\\Objects\\ApiException $e) {\n $response = json_decode($e->getResponseBody(), true);\n $retryAfter =\n isset($response['policyName'])\n && $response['policyName'] == self::TEN_SECONDLY_ROLLING_POLICY\n ? self::TEN_SECONDLY_ROLLING_LIMIT\n : 1;\n } catch (Exception $e) {\n $retryAfter = 1;\n }\n\n $this->logger->warning('[HubSpot] Bulk add playback url to CRM failed', [\n 'reason' => $e->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep($retryAfter);\n\n return $this->bulkAddPlaybackURLToDescriptionRequest($payload, false);\n }\n\n return false;\n }\n\n /**\n * Sometimes we have secondly rate limit error, then retry request after 1 second\n */\n public function searchCallByRecordingURLToken(string $playbackURLToken, bool $retry = true): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n $payload = $this->payloadBuilder->generateSearchCallByTokenPayload($playbackURLToken);\n\n $this->logger->info('[HubSpot] CRM Search by playback URL token requested', [\n 'request' => $payload,\n ]);\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, ['json' => ($payload)]);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search by playback URL token failed', [\n 'playbackURLToken' => $playbackURLToken,\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallByRecordingURLToken($playbackURLToken, false);\n }\n\n return [];\n }\n\n return empty($response['results']) ? [] : $response['results'][0];\n }\n\n /**\n * Generate transcription for the activity.\n */\n private function generateTranscription(Activity $activity): string\n {\n if (! $this->config->store_transcript) {\n // If sending transcription to activity toggle is disabled\n return '';\n }\n\n $transcriptionSegments = $this->transcriptionService->findTranscriptionByActivity($activity);\n\n if ($transcriptionSegments->isEmpty()) {\n return '';\n }\n\n $transcription = sprintf(\n '<p><strong>Transcript for %s</strong></p><p></p>',\n $activity->title ?? $activity->activity_title,\n );\n\n $roomOwnerParticipant = $activity->findParticipantRoomOwner();\n $roomOwnerParticipantId = $roomOwnerParticipant !== null\n ? $roomOwnerParticipant->getId()\n : null;\n\n\n $transcription .= $transcriptionSegments\n ->map(static function (array $transcriptionSegment) use ($roomOwnerParticipantId): string {\n $isOrganiser = $roomOwnerParticipantId === $transcriptionSegment['participantId']\n && $roomOwnerParticipantId !== null;\n $transcriptColor = $isOrganiser ? '#000000' : '#f0415a';\n\n return sprintf(\n '<span style=\"color: %s;\">%s | </span>%s',\n $transcriptColor,\n $transcriptionSegment['formattedStartsAt'],\n $transcriptionSegment['transcript'],\n );\n })\n ->implode('<br />');\n\n return $transcription;\n }\n\n /**\n * @param array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }> $options\n *\n * @return FieldData[]\n */\n private function importOptions(Field $field, array $options): array\n {\n $fieldValues = [];\n $values = [];\n $sequence = 0;\n\n foreach ($options as $option) {\n $values[] = [\n 'value' => $option['value'] ?? $option['id'],\n 'label' => substr($option['label'], 0, 255),\n 'sequence' => $sequence++,\n ];\n }\n\n $fieldsToPurge = $field->values()->get()->pluck('value')->toArray();\n\n foreach ($values as $value) {\n $value['value'] = substr($value['value'], 0, 255);\n $fieldValues[] = $field->values()->updateOrCreate([\n 'value' => $value['value'],\n ], $value);\n\n // Remove this value from the ones we are going to purge.\n if (($key = array_search($value['value'], $fieldsToPurge, false)) !== false) {\n unset($fieldsToPurge[$key]);\n }\n }\n\n // Delete the old values that are no longer used.\n $field->values()->whereIn('value', $fieldsToPurge)->delete();\n\n return $fieldValues;\n }\n\n public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null || $objectId === null) {\n return null;\n }\n\n /** @var User $user */\n $user = $activity->getUser();\n\n $profile = $this->assignCrmOwner($user, $activity);\n if (! $profile instanceof Profile) {\n return null;\n }\n\n $timestamp = Carbon::now($user->getTimezone())->getTimestamp() * 1000;\n $engagement = [\n 'active' => true,\n 'ownerId' => $profile->getAttribute('crm_provider_id'),\n 'timestamp' => $timestamp,\n 'type' => 'NOTE',\n ];\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $body = mb_strimwidth($body, 0, self::ENGAGEMENT_BODY_MAX_LENGTH);\n $metadata = [\n 'body' => $body,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsActivityId = $this->client->createNote(\n body: $body,\n ownerId: $profile->getCrmProviderId(),\n timestamp: $timestamp,\n objectId: $objectId,\n noteObject: $noteObject,\n );\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $this->logger->info('[HubSpot] Saving Transcription Summary as Note', [\n 'activity' => $activity->getUuid(),\n 'crmActivity' => $hsActivityId,\n ]);\n\n return $hsActivityId;\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function attachSummaryToActivity(ActivityContract $activity, string $summaryTitle, string $summaryContents): bool\n {\n $this->logger->info('[HubSpot] Attaching summary to activity', [\n 'activity' => $activity->getUuid(),\n 'summary_content' => $summaryContents,\n ]);\n\n if (! $activity instanceof Activity) {\n throw new InvalidArgumentException('Expected instance of Activity');\n }\n\n $summary = '<p><strong>' . $summaryTitle . '</strong></p>';\n $summary .= '<p>' . $summaryContents . '</p>';\n $metadata = $this->buildMetadataForSummaryUpdate($activity, $summary);\n\n try {\n $type = $this->matchActivityEngagementType($activity);\n $engagement = ['type' => $type];\n\n $this->client->updateEngagement($activity->getCrmProviderId(), $engagement, $metadata);\n } catch (Exception $e) {\n $this->logger->warning('[HubSpot] Update summary failed', [\n 'activity' => $activity->getUuid(),\n 'reason' => $e->getMessage(),\n ]);\n\n return false;\n }\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $activity->getCrmProviderId()],\n $metadata,\n );\n\n return true;\n }\n\n private function buildMetadataForSummaryUpdate(Activity $activity, string $summary): array\n {\n $descriptionField = $activity->getType() === Activity::TYPE_CONFERENCE ? 'internalMeetingNotes' : 'body';\n $engagement = $this->client->getEngagementData($activity->getCrmProviderId());\n // Meeting without internalMeetingNotes might mean it just does not have any notes;\n $description = $engagement['metadata'][$descriptionField] ?? null;\n\n if (empty($description)) {\n $data = $summary;\n } else {\n // avoid playbook url link to Jiminny being sent twice in the activity description\n $targetUrl = PlaybackUrlBuilder::build($activity);\n\n if (str_contains($description, $targetUrl)) {\n $jiminnyUrl = '<p><a href=\"' . $targetUrl . '\" title=\"Play at Jiminny\">Play at Jiminny</a></p>';\n $summary = str_replace($jiminnyUrl, '', $summary);\n\n $this->logger->info('[HubSpot] Summary modified', [\n 'activity' => $activity->getUuid(),\n 'target_url' => $jiminnyUrl,\n 'modified_summary_content' => $summary,\n ]);\n }\n\n $data = $description . '<p></p>' . $summary;\n }\n\n return [\n $descriptionField => $data,\n ];\n }\n\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n return $this->syncRelatedActivityManager->fetchAndAssociateRelatedActivity($activity);\n }\n\n public function fetchRelatedActivity(Activity $activity): array\n {\n return [];\n }\n\n public function getDealsInBulk(array $dealIds): array\n {\n $payload = $this->payloadBuilder->getDealsInBulkPayload($dealIds);\n\n return $this->client->getPaginatedData($payload, 'deals');\n }\n\n /**\n * Extract deal IDs from HubSpot search response.\n *\n * @param array $hubspotResponse The raw HubSpot search API response.\n * @param bool $includeArchived Whether to include archived deals (default: false).\n *\n * @return string[] Array of deal IDs as strings.\n */\n public function extractDealIds(array $hubspotResponse, bool $includeArchived = false): array\n {\n if (empty($hubspotResponse['results'])) {\n return [];\n }\n\n return array_values(\n array_map(\n fn ($deal) => $deal['id'],\n array_filter(\n $hubspotResponse['results'],\n fn ($deal) => $includeArchived || empty($deal['archived'])\n )\n )\n );\n }\n\n public function matchActivityEngagementType(Activity $activity): string\n {\n return match ($activity->getType()) {\n Activity::TYPE_CONFERENCE => self::TYPE_MEETING,\n Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND => self::TYPE_CALL,\n default => self::TYPE_NOTE,\n };\n }\n\n private function assignCrmOwner(User $user, ActivityContract $activity): ?Profile\n {\n $profile = $user->getProfile();\n if ($profile instanceof Profile) {\n return $profile;\n }\n\n $this->logger->info('[HubSpot] Unable to save summary. No profile', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n private static function getDealsPipelinesEndpoint(): string\n {\n return self::API_URL . self::ENDPOINT_PIPELINES . self::PIPELINE_OBJECT_TYPE_DEALS;\n }\n\n public function verifyTaskExists(Activity $activity): bool\n {\n $crmProviderId = $activity->getCrmProviderId();\n $cacheKey = \"crm_task_exists:{$this->config->getId()}:$crmProviderId\";\n\n return Cache::remember($cacheKey, self::TASK_VERIFICATION_CACHE_TTL, function () use ($crmProviderId) {\n try {\n $engagement = $this->client->getEngagementData($crmProviderId);\n\n return ! empty($engagement);\n } catch (HttpNotFoundException|BadRequest) {\n // Engagement not found in CRM - this is expected and permanent\n $this->logger->info('[Hubspot] Engagement not found during verification', [\n 'engagement_id' => $crmProviderId,\n 'config_id' => $this->config->getId(),\n ]);\n\n return false;\n }\n // Let other exceptions (network errors, rate limits, etc.) bubble up for retry\n });\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse Carbon\\Carbon;\nuse Exception;\nuse Generator;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Illuminate\\Support\\Facades\\Cache;\nuse InvalidArgumentException;\nuse Jiminny\\Contracts\\Repositories\\TeamRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\HubspotInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SavePlaybackLinkToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\VerifyTaskExistsInterface;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\HttpNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Participant;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Repositories\\Crm\\FieldRepository;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\ParticipantRepository;\nuse Jiminny\\Services\\Avatar\\ProspectPhotoPathService;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\Hubspot\\Actions\\SyncArchivedProfilesAction;\nuse Jiminny\\Services\\Crm\\Hubspot\\Fields\\ValueNormalizer;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\OpportunitySyncTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncFieldsTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\WriteCrmTrait;\nuse Jiminny\\Services\\Crm\\MatchDomainByEmailInterface;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Services\\Crm\\ResolveCompanyNameByEmailTrait;\nuse Jiminny\\Utils\\PlaybackUrlBuilder;\nuse Sentry;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse Throwable;\nuse UnexpectedValueException;\n\n/**\n * @phpstan-type CrmFieldDefinition array{\n * name: string,\n * label: string,\n * description: string,\n * type: string,\n * fieldType: string,\n * hidden: bool,\n * showCurrencySymbol: bool,\n * options: array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }\n */\nclass Service extends BaseService implements\n HubspotInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n SendSummaryToCrmInterface,\n MatchDomainByEmailInterface,\n SavePlaybackLinkToCrmInterface,\n RemoteEntityManipulationInterface,\n FetchRelatedActivityInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n VerifyTaskExistsInterface\n{\n use ResolveCompanyNameByEmailTrait;\n use SyncCrmEntitiesTrait;\n use WriteCrmTrait;\n use SyncFieldsTrait;\n use OpportunitySyncTrait;\n\n private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;\n\n private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';\n private const int BATCH_UPDATE_LIMIT = 100;\n private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';\n private const int TEN_SECONDLY_ROLLING_LIMIT = 10;\n private const string CALLS_SEARCH_ENDPOINT = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n\n private const string TYPE_NOTE = 'NOTE';\n\n private const string TYPE_MEETING = 'MEETING';\n\n private const string TYPE_CALL = 'CALL';\n\n private const string API_URL = 'https://api.hubapi.com';\n\n // NB: v1 is legacy - v3 is the newest\n private const string ENDPOINT_PIPELINES = '/crm-pipelines/v1/pipelines/';\n private const string PIPELINE_OBJECT_TYPE_DEALS = 'deals';\n\n private const int TASK_VERIFICATION_CACHE_TTL = 86400; // 1 day\n\n /**\n * @var ClientInterface|Client\n */\n protected $client;\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected ProspectPhotoPathService $prospectPhotoPathService;\n\n private SyncFieldAction $syncFieldAction;\n private PayloadBuilder $payloadBuilder;\n private SyncRelatedActivityManager $syncRelatedActivityManager;\n private SyncArchivedProfilesAction $syncArchivedProfilesAction;\n private WebhookSyncBatchProcessor $batchProcessor;\n\n public function __construct(\n Client $client,\n SyncFieldAction $syncFieldAction,\n PayloadBuilder $payloadBuilder,\n ProspectPhotoPathService $prospectPhotoPathService,\n SyncArchivedProfilesAction $syncArchivedProfilesAction,\n WebhookSyncBatchProcessor $batchProcessor,\n ) {\n parent::__construct();\n\n $this->client = $client;\n $this->syncFieldAction = $syncFieldAction;\n $this->prospectPhotoPathService = $prospectPhotoPathService;\n $this->payloadBuilder = $payloadBuilder;\n $this->syncArchivedProfilesAction = $syncArchivedProfilesAction;\n $this->batchProcessor = $batchProcessor;\n $this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [\n 'client' => $this->client,\n ]);\n $this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [\n 'client' => $this->client,\n 'payloadBuilder' => $this->payloadBuilder,\n 'logger' => $this->logger,\n ]);\n $this->crmEntityRepository = app(CrmEntityRepository::class);\n $this->dealFieldsService = app(DealFieldsService::class);\n }\n\n public function getDisplayName(): string\n {\n return 'HubSpot';\n }\n\n protected function getOAuthAccount(User $user): ?SocialAccount\n {\n // In this case, the Account Owner is always the connection for any API operations.\n $owner = $user->team->owner;\n\n return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);\n }\n\n public function getClient(): Client\n {\n /** @var Client */\n return $this->client;\n }\n\n /**\n * Convert raw field data into a format compatible with CRM APIs.\n *\n * @param bool $internal Direction of the conversion.\n * True is pulling from CRM, false normalize before sending to CRM.\n */\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return ValueNormalizer::normalize(\n fieldType: $fieldType,\n fieldValue: $fieldValue,\n isInbound: $internal,\n );\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultFields(string $activityType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n $defaultFields = FieldDefinitions::defaultTaskFields();\n\n // This lazy creates these fields if not already setup.\n foreach ($defaultFields as $defaultField) {\n $fields[] = $this->config->fields()->firstOrCreate($defaultField);\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityField(string $activityType): Field\n {\n /** @var Field $activityField */\n $activityField = $this->config->fields()->where([\n 'crm_provider_id' => 'activityType',\n 'object_type' => $activityType,\n ])->first();\n\n return $activityField;\n }\n\n /**\n * @inheritdoc\n */\n public function getSupportedPlaybookTypes(): array\n {\n return [Playbook::ACTIVITY_TYPE_TASK];\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n // Outcome should always be provided calls/meetings.\n $fieldData = [\n [\n 'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',\n 'object_type' => Field::OBJECT_TASK,\n ],\n ];\n\n foreach ($fieldData as $data) {\n $field = $this->config->fields()->where($data)->first();\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n }\n\n return $fields;\n }\n\n public function getDealInsightsFields(): array\n {\n return FieldDefinitions::dealInsightsFields();\n }\n\n protected function getDefaultFollowupLayoutFields(string $activityType): array\n {\n $fields = [];\n $fieldRepo = app(FieldRepository::class);\n $fieldData = FieldDefinitions::followupFieldsFilter();\n\n foreach ($fieldData as $data) {\n $field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function syncField(Field $field): void\n {\n switch ($field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_CONTACT:\n $crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_OPPORTUNITY:\n $crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_TASK:\n $this->syncSingleTaskField($field);\n\n return;\n default:\n return;\n }\n\n $this->syncFieldAction->execute($field, $crmField->toArray());\n }\n\n /**\n * @param array<array{\n * id:string,\n * label:string,\n * value?:string\n * }> $options\n *\n * @throws CrmException\n *\n * @return FieldData[]\n *\n */\n public function importPicklistValues(\n Field $field,\n array $options = [['id' => '', 'label' => '', 'value' => '']],\n ): array {\n if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {\n // We already have the options, no need to fetch them again\n return $this->importOptions($field, $options);\n }\n\n $options = [];\n\n switch ($field->getObjectType()) {\n case Field::OBJECT_ACCOUNT:\n $options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_CONTACT:\n $options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n // Hubspot has different endpoint for stages\n $options = $this->getClient()->fetchOpportunityFieldOptions($field);\n\n break;\n\n case Field::OBJECT_TASK:\n if ($field->getCrmProviderId() === 'disposition') {\n $options = $this->getClient()->fetchDispositionFieldOptions();\n } elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {\n $options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);\n }\n\n break;\n\n default:\n $this->logger->warning('Invalid object type', [\n 'object_type' => $field->getObjectType(),\n 'field_id' => $field->getId(),\n ]);\n\n throw new CrmException('Invalid object type');\n }\n\n return $this->importOptions($field, $options);\n }\n\n /**\n * @inheritdoc\n */\n public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage\n {\n $missingStage = null;\n\n try {\n // Use the HubSpot API client instead of the SDK crmPipelines() method\n $endpoint = self::getDealsPipelinesEndpoint();\n $pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);\n $pipelines = $pipelinesResponse->data->results;\n } catch (RequestException|BadRequest $exception) {\n throw $exception;\n }\n\n foreach ($pipelines as $pipeline) {\n $stages = [];\n\n // We create a business process to contain the pipeline, and store all stages against it.\n $p = ResponseNormalize::normalizePipeline($pipeline);\n\n // Create/update business process for this pipeline\n $businessProcess = $this->config->businessProcesses()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'type' => BusinessProcess::TYPE_OPPORTUNITY,\n 'is_selectable' => $p['active'],\n ]);\n\n // A record type is really a clone of the business process, used to store which record uses which pipeline.\n // Create/update record type clone\n $this->config->recordTypes()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'is_selectable' => $p['active'],\n 'business_process_id' => $businessProcess->id ?? null,\n ]);\n\n // Stages - fetch all existing stages upfront to avoid N+1 queries\n $existingStages = $this->config->stages()\n ->withTrashed()\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->get()\n ->keyBy('crm_provider_id');\n\n foreach ($p['stages'] as $dealStage) {\n $s = ResponseNormalize::normalizeDealStage($dealStage);\n\n /** @var ?Stage $existingStage */\n $existingStage = $existingStages->get($s['id']);\n\n // Restore soft-deleted stages that are now active in HubSpot\n if ($existingStage?->trashed() && $s['active']) {\n $existingStage->restore();\n }\n\n // Upsert stage (updates soft-deleted records without restoring them)\n $stage = $this->config->stages()->withTrashed()->updateOrCreate([\n 'crm_provider_id' => $s['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($s['label'], 0, 50),\n 'label' => mb_strimwidth($s['label'], 0, 191),\n 'type' => Stage::TYPE_OPPORTUNITY,\n 'sequence' => $s['displayOrder'],\n 'is_selectable' => $s['active'],\n 'probability' => $s['probability'] * 100,\n ]);\n\n if ($missingStageName === $s['id']) {\n $missingStage = $stage;\n }\n\n $stages[] = $stage->id;\n }\n\n $businessProcess->stages()->sync($stages);\n }\n\n return $missingStage;\n }\n\n /**\n * @inheritdoc\n */\n public function syncOrganization(): void\n {\n try {\n $endpoint = 'https://api.hubapi.com/integrations/v1/me';\n $response = $this->client->getInstance()->getClient()->request('get', $endpoint);\n\n $accountData = $response->data;\n $this->config->update(['default_currency' => $accountData->currency]);\n } catch (BadRequest $e) {\n throw new CrmException('Could not sync the organization.', $e->getCode(), $e);\n }\n }\n\n /**\n * @inheritdoc\n *\n * @throws CrmException\n */\n public function syncProfiles(?User $userToSearch = null): ?Profile\n {\n $this->syncArchivedProfilesAction->execute($this->team, $this->client, $this->config);\n\n try {\n $owners = $this->client->getOwners();\n } catch (\\HubSpot\\Client\\Crm\\Owners\\ApiException $e) {\n $this->logger->error('[HubSpot] Could not sync the profiles.', [\n 'team_id' => $this->team->getId(),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new CrmException('Could not sync the profiles.', $e->getCode(), $e);\n }\n\n $profileRepository = app(ProfileRepository::class);\n $teamRepository = app(TeamRepository::class);\n\n foreach ($owners as $owner) {\n if ($owner->getArchived()) {\n // not supposed to fetch archived, but log anyway\n $this->logger->warning('[HubSpot] Found archived owner', [\n 'crm_provider_id' => $owner->getId(),\n 'email' => $owner->getEmail(),\n ]);\n\n continue;\n }\n\n $email = $owner->getEmail();\n if ($email === null) {\n continue;\n }\n\n $user = $teamRepository->findActiveTeamMemberByEmail($this->team, $email);\n\n if (! $user instanceof User) {\n continue;\n }\n\n $profile = $profileRepository->updateOrCreateProfile($user, [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $owner->getId(),\n ]);\n\n if ($userToSearch && $userToSearch->getId() === $user->getId()) {\n return $profile;\n }\n }\n\n return null;\n }\n\n private function generateNameSearchPayload(string $name, int $offset, int $limit): array\n {\n $payload = [\n 'query' => $name,\n 'sorts' => [\n [\n 'propertyName' => 'modifieddate',\n 'direction' => 'DESCENDING',\n ],\n ],\n 'properties' => [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n 'industry',\n 'name',\n 'company',\n ],\n 'limit' => $limit,\n 'after' => $offset,\n ];\n\n $this->logger->debug('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n return $payload;\n }\n\n /**\n * @inheritdoc\n */\n public function find(string $name, array $scopes): array\n {\n $count = $this->limit ?? 20;\n $offset = $this->offset ?? 0;\n\n /** @var array<int, array<string, mixed>> */\n return Cache::remember(\n key: $this->team->getId() . $name . $count . $offset,\n ttl: 300,\n callback: function () use ($name, $offset, $count): array {\n $data = [];\n\n // Use the new V3 API to find contacts based on additional fields.\n foreach (['companies', 'contacts'] as $objectType) {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/' . $objectType . '/search';\n $payload = $this->generateNameSearchPayload($name, $offset, $count);\n $type = $objectType === 'companies' ? 'account' : 'contact';\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, [\n 'json' => $payload,\n ]);\n\n // Build mapped list.\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n\n $objectName = $this->buildContactName($properties);\n\n $record = [\n 'crmId' => $object['id'],\n // Pass crmUrl to the FE, needed for success message in the extension when you log activity.\n 'crmUrl' => $this->generateProviderUrl($object['id'], $type),\n 'name' => $objectName,\n 'prospectType' => $type,\n 'phoneNumbers' => [],\n ];\n\n if ($type === 'account') {\n $record['industry'] = $properties['industry'] ?? null;\n } else {\n $record['title'] = $properties['jobtitle'] ?? null;\n $record['organization'] = $properties['company'] ?? null;\n }\n\n $countryCode = $this->buildContactCountry($properties);\n $parsedNumber = $this->buildContactPhone($countryCode, $properties);\n\n // Add phone number to record.\n if (! empty($parsedNumber['phone'])) {\n $record['phoneNumbers'][] = [\n 'number' => $parsedNumber['phone'],\n 'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),\n 'type' => 'phone',\n ];\n }\n\n // Add mobile phone number to record.\n if (! empty($properties['mobilephone'])) {\n $mobileNumber = phone_e164($countryCode, $properties['mobilephone']);\n if ($mobileNumber !== null) {\n $record['phoneNumbers'][] = [\n 'number' => $mobileNumber,\n 'nationalFormat' => phone_national($countryCode, $mobileNumber),\n 'type' => 'mobile',\n ];\n }\n }\n\n $data[] = $record;\n }\n } catch (BadRequest $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->getUuid(),\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n }\n\n return $data;\n },\n );\n }\n\n\n /**\n * @inheritdoc\n */\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n $ownerId = null;\n\n if ($crmAccountId === null) {\n return $data;\n }\n\n if ($userId) {\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n $ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n $closedStages = $this->getClosedDealStages();\n $payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(\n $this->config,\n $crmAccountId,\n $closedStages,\n );\n\n $results = $this->client->getPaginatedData($payload, 'deals');\n\n foreach ($results['results'] as $object) {\n $properties = $object['properties'];\n\n $amount = null;\n if (empty($properties['amount']) === false) {\n $currency = $properties['deal_currency_code'] ?? $this->config->default_currency;\n\n // Values can contain commas and any junk so strip them.\n $value = (float) preg_replace('/[^\\d.]/', '', $properties['amount']);\n $amount = formatCurrency($value, $currency);\n }\n\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n\n if ($businessProcess === null) {\n // Import it.\n $stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n } else {\n $stage = $businessProcess\n ->stages()\n ->where('crm_provider_id', $properties['dealstage'])\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n if ($stage === null) {\n // Import it.\n $stage = $this->importStages(null, $properties['dealstage']);\n }\n }\n\n $recordType = null;\n if ($businessProcess) {\n $recordType = $businessProcess->recordTypes()->first();\n }\n\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $record = [\n 'crmId' => $object['id'],\n 'name' => $properties['dealname'] ?? 'Unknown Deal',\n 'value' => $amount,\n 'won' => $isWon,\n 'closed' => $isWon || $isLost,\n 'stage' => [\n 'id' => $stage?->getUuid() ?? '',\n 'name' => $stage?->getName() ?? '',\n ],\n ];\n\n if ($recordType) {\n $record += [\n 'recordType' => [\n 'id' => $recordType->id_string,\n 'name' => $recordType->name,\n ],\n ];\n }\n\n if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n }\n\n /**\n * @inheritdoc\n */\n public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array\n {\n $data = [];\n switch ($objectType) {\n case 'contact':\n $hsObject = 'contact';\n\n break;\n case 'account':\n $hsObject = 'company';\n\n break;\n default:\n // This is a hack to prioritise and override a contact/company with a deal.\n if ($opportunityId) {\n $hsObject = 'deal';\n $objectId = $opportunityId;\n } else {\n throw new InvalidArgumentException('Object type not supported.');\n }\n }\n\n $engagementTypes = ['meetings', 'tasks'];\n\n foreach ($engagementTypes as $engagementType) {\n $payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);\n\n $this->logger->info('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n $engagements = $this->client->getPaginatedData($payload, $engagementType);\n\n foreach ($engagements['results'] as $engagement) {\n if ($engagementType == 'meetings') {\n $title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';\n } elseif ($engagementType == 'tasks') {\n $title = $engagement['properties']['hs_task_subject'];\n } else {\n $title = 'Scheduled meeting';\n }\n\n $data[] = [\n 'crmId' => $engagement['id'],\n 'subject' => $title,\n 'due' => $engagement['properties']['hs_timestamp'],\n 'type' => $engagement['properties']['hs_activity_type'] ?? null,\n ];\n }\n }\n\n usort($data, function ($item1, $item2) {\n return $item2['due'] <=> $item1['due'];\n });\n\n return $data;\n }\n\n /**\n * Try to find CRM Objects using email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchExactlyByEmail(string $email, ?int $userId = null): ?array\n {\n $contactProperties = [\n 'email',\n// 'firstname',\n// 'lastname',\n// 'country',\n// 'phone',\n// 'mobilephone',\n// 'jobtitle',\n// 'hubspot_owner_id',\n// 'associatedcompanyid',\n// 'photo',\n ];\n $contact = null;\n $account = null;\n\n try {\n $hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);\n return null;\n\n if ($hsContact) {\n $contact = $this->importContact($hsContact);\n $account = $contact->account;\n }\n\n $data = $this->convertCrmData($contact, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n } catch (BadRequest $e) {\n $this->logger->warning('[HubSpot] Search failed', [\n 'team_id' => $this->team->getId(),\n 'search_identifier' => $email,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return null;\n }\n\n public function getDomain(string $email): ?string\n {\n return $this->getDomainFromEmail($email);\n }\n\n /**\n * Try to find CRM objects using domain name of the email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByDomain(string $domain, ?int $userId = null): ?array\n {\n $companyName = $domain;\n\n // Try to find a company matching their email domain.\n $companyProperties = [\n 'country',\n 'phone',\n 'name',\n 'hs_avatar_filemanager_key',\n 'industry',\n 'hubspot_owner_id',\n 'domain',\n ];\n\n try {\n $hsAccounts = $this->client\n ->getInstance()\n ->companies()\n ->searchByDomain($companyName, $companyProperties);\n } catch (Throwable $e) {\n $this->logger->info('[HubSpot] Search failed', [\n 'error' => $e->getMessage(),\n 'domain' => $domain,\n ]);\n\n return null;\n }\n\n $account = null;\n // If there are multiple accounts, don't guess, we'll ask later.\n if (\\count($hsAccounts->data->results) === 1) {\n // Persist this remote object.\n $account = $this->syncAccount($hsAccounts->data->results[0]->companyId);\n }\n\n $data = $this->convertCrmData(null, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n }\n\n /**\n * @return array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array\n {\n $countryCode = null;\n if ($contact && $contact->country_code) {\n $countryCode = $contact->country_code;\n } elseif ($account && $account->country_code) {\n $countryCode = $account->country_code;\n }\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact ? $contact->crm_provider_id : null,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n // If there are multiple opportunities, don't guess, we'll ask later.\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n protected function getCacheKey(string $object, ?int $userId = null): ?string\n {\n $key = $this->team->getId() . $object;\n $keySuffix = $this->getOwnerKeySuffix($userId);\n\n return $key . $keySuffix;\n }\n\n private function getOwnerKeySuffix(?int $userId = null): string\n {\n return $userId === null ? '' : (string) $userId;\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n *}\n */\n public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array\n {\n if (str_contains($phone, '**')) {\n return null;\n }\n\n // trim all whitespaces if present so the lookup doesn't fail\n $phone = str_replace(' ', '', $phone);\n\n // Check if the user is internal.\n if ($this->isPhoneNumberOfTeamMember($phone)) {\n return null;\n }\n\n $response = $this->searchForPhoneNumber($phone);\n if (empty($response)) {\n return null;\n }\n\n // This would ideally importContact instead but the response type differs.\n $contact = $this->findAndSyncContact($response['results'][0]['id']);\n if (! $contact instanceof Contact) {\n return null;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account?->crm_provider_id,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n\n try {\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n } catch (Exception $e) {\n $this->logger->debug('[HubSpot] Opportunity failed to sync.', [\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n private function isPhoneNumberOfTeamMember(string $phone): bool\n {\n $teamRepository = app(TeamRepository::class);\n $user = $teamRepository->findTeamMemberByPhone($this->team, $phone);\n\n if ($user instanceof User) {\n return true;\n }\n\n return false;\n }\n\n private function findAndSyncContact(string $crmId): ?Contact\n {\n try {\n return $this->syncContact($crmId);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'reason' => $exception->getMessage(),\n ]);\n\n return null;\n }\n }\n\n private function hasResults(array $response): bool\n {\n return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;\n }\n\n private function searchForPhoneNumber(string $phone): array\n {\n // Normalizes the provided phone number for the API search.\n $normalizedPhone = $this->normalizePhoneNumber($phone);\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);\n\n $this->logger->info('[HubSpot] Phone match search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);\n\n if (! $this->hasResults($response)) {\n $nationalPhone = preg_replace('/\\D/', '', phone_national(null, $phone));\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);\n\n $this->logger->info('[HubSpot] Phone match national number search triggered', [\n 'phone' => $phone,\n 'nationalPhone' => $nationalPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n if (! $this->hasResults($response)) {\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);\n\n $this->logger->info('[HubSpot] Phone match alternative search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n return $this->hasResults($response) ? $response : [];\n }\n\n private function handlePhoneSearchRequest(string $phone, array $payload): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/contacts/search';\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n $endpoint,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'phone' => $phone,\n 'reason' => $exception->getMessage(),\n ]);\n\n return [];\n }\n\n $this->logger->info('[HubSpot] Phone match completed', [\n 'phone' => $phone,\n 'response' => $response,\n ]);\n\n return $response->toArray();\n }\n\n private function normalizePhoneNumber(string $phone): string\n {\n return ltrim(phone_e164(null, $phone), '+0');\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByName(string $name, ?int $userId = null): ?array\n {\n // Don't waste time searching for single character strings.\n if (\\strlen($name) <= 1) {\n return null;\n }\n\n $cacheKey = $this->getCacheKey($name, $userId);\n\n $result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {\n $payload = $this->payloadBuilder->generateSearchContactsByNamePayload(\n $name,\n $this->getContactFields()\n );\n\n $hsContacts = $this->client->getPaginatedData($payload, 'contact');\n if (empty($hsContacts['results'])) {\n return false;\n }\n\n $contact = $this->importContact($hsContacts['results'][0]);\n if ($contact === null) {\n return false;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n });\n\n return is_array($result) ? $result : null;\n }\n\n\n private function convertActivityAssociations(Activity $activity): array\n {\n return [\n 'contactIds' => $this->getParticipantsIds($activity),\n 'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],\n 'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],\n 'ownerIds' => [],\n ];\n }\n\n private function getParticipantsIds(Activity $activity): array\n {\n $attendees = [];\n\n $participantRepository = app(ParticipantRepository::class);\n $participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);\n foreach ($participants as $participant) {\n if ($participant->user_id || $participant->isCoach()) {\n continue;\n }\n\n $contact = $participant->contact()->first();\n if ($contact && $contact->crm_provider_id) {\n $attendees[] = $contact->crm_provider_id;\n } else {\n if (! empty($participant->name)) {\n $attendeeData = $this->fetchMissingAttendeeInfo($participant);\n }\n if (! empty($attendeeData['id'])) {\n $attendees[] = $attendeeData['id'];\n }\n }\n }\n\n if ($activity->hasContact()) {\n $attendees[] = $activity->contact->crm_provider_id;\n }\n\n return array_unique($attendees);\n }\n\n private function fetchMissingAttendeeInfo(Participant $participant): array\n {\n // Check if we need to look inside an account context.\n $activity = $participant->getActivity();\n $companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;\n\n // First check the local data.\n /** @var Contact[] $contacts */\n $contacts = $this->team->contacts()\n ->with('account')\n ->where('name', $participant->name)\n ->whereNotNull('email')\n ->get();\n\n foreach ($contacts as $contact) {\n // If we have a company in scope, check the contact is associated to it.\n if (\n $companyId !== null\n && ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)\n ) {\n continue;\n }\n\n return [\n 'id' => $contact->crm_provider_id,\n 'email' => $contact->email,\n ];\n }\n\n $payload = $this->generateNameSearchPayload($participant->name, 0, 20);\n\n try {\n $response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);\n\n // TODO add some logic to choose the most suitable contact if multiple\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n if (empty($object['properties']) === false) {\n // Check the company matches the contact.\n // Todo: Move this check inside the API search.\n if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {\n continue;\n }\n\n return [\n 'id' => $object['id'],\n 'email' => $properties['email'],\n ];\n }\n }\n } catch (Exception $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->id_string,\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [];\n }\n\n /**\n * Store transcripts as note engagement.\n *\n * @throws Exception\n */\n public function createTranscriptNotes(Activity $activity): void\n {\n // For HS no need to check if Crm profile - Log Notes field is enabled\n // We only check if store_transcript toggle is enabled on crm profile.\n $engagement = [\n 'active' => true,\n 'ownerId' => $this->profile->crm_provider_id,\n 'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,\n 'type' => 'NOTE',\n ];\n\n // Generate activity transcription.\n $transcriptionData = $this->generateTranscription($activity);\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);\n\n $metadata = [\n 'body' => $transcripts,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsEngagement = $this->client\n ->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $noteId = $hsEngagement->data->engagement->id;\n\n // Store crm logged id in transcription.\n $transcription = $activity->getTranscription();\n $transcription->crm_activity_id = $noteId;\n $transcription->save();\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $payload = [\n 'properties' => $data,\n ];\n\n try {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n $this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);\n\n break;\n case FieldData::OBJECT_CONTACT:\n $this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_ACCOUNT:\n $this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_TASK:\n // Endpoint for Engagements not ready\n $engagements = [\n 'type' => 'TASK',\n ];\n $metadata = $data;\n $this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $objectId],\n $metadata,\n );\n\n break;\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $apiException) {\n $errorMessage = $apiException->getMessage();\n if ($apiException->getResponseBody()) {\n $responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);\n $errorMessage = $responseBody['message'] ?? $apiException->getMessage();\n }\n\n $this->logger->error(\n '[HubSpot] Update record failed',\n [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'payload' => $payload,\n 'reason' => $errorMessage,\n 'team' => $this->team->getUuid(),\n ]\n );\n\n throw new CrmException($errorMessage);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n return $this->client->getInstance()->deals()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_CONTACT:\n return $this->client->getInstance()->contacts()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_ACCOUNT:\n return $this->client->getInstance()->companies()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_TASK:\n return $this->client->getInstance()->engagements()->get($objectId)->toArray();\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n }\n\n /**\n * @throws BadRequest\n * @throws CrmException\n */\n public function updateStage($crmObject, Stage $stage): void\n {\n $payload = [\n 'properties' => [\n [\n 'name' => 'dealstage',\n 'value' => $stage->crm_provider_id,\n ],\n ],\n ];\n\n try {\n $this->client->getInstance()->deals()->update($crmObject->crm_provider_id, $payload);\n } catch (BadRequest $badRequest) {\n if ($badRequest->getCode() === 403) {\n throw new CrmException(\n \"Sorry, you don't have permission to update this stage.\",\n $badRequest->getCode(),\n $badRequest,\n );\n }\n\n $this->logger->warning('[HubSpot] Stage update failed', [\n 'dealId' => $crmObject->crm_provider_id,\n 'payload' => $payload,\n 'message' => $badRequest->getMessage(),\n ]);\n\n throw $badRequest;\n }\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n $url = null;\n $baseUrl = 'https://app.hubspot.com/contacts/' . $this->config->crm_provider_id . '/';\n\n switch ($objectType) {\n case 'account':\n $url = $baseUrl . 'company/' . $providerId;\n\n break;\n\n case 'contact':\n $url = $baseUrl . 'contact/' . $providerId;\n\n break;\n\n case 'opportunity':\n $url = $baseUrl . 'deal/' . $providerId;\n\n break;\n\n case 'task':\n case 'activity':\n return null;\n\n // This should not be deep-linked as per JMNY-3934.\n //$url = $baseUrl.'tasks/list/view/all/?taskId='.$providerId;\n break;\n }\n\n return $url;\n }\n\n public function searchCalls(Carbon $from, Carbon $to, string $activityProvider): array\n {\n $this->logger->info('[HubSpot] Search calls', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $calls = [];\n $page = 1;\n\n do {\n try {\n $payload = $this->payloadBuilder->generateGetCallsPayload($from, $to, $activityProvider, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n $calls = array_merge($calls, $responseResults);\n $page++;\n } while (! empty($responseResults));\n\n return $calls;\n }\n\n public function searchCallsForPeriodByPage(Carbon $from, Carbon $to, int $page, bool $retry = true)\n {\n try {\n $payload = $this->payloadBuilder->generateSearchCallsByPeriodPayload($from, $to, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls for period failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallsForPeriodByPage($from, $to, $page, false);\n }\n $response = null;\n }\n\n return $response;\n }\n\n public function searchCallsForPeriod(Carbon $from, Carbon $to): Generator\n {\n $this->logger->info('[HubSpot] Search calls for period', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $page = 1;\n\n do {\n $response = $this->searchCallsForPeriodByPage($from, $to, $page);\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n\n $associationContacts = $this->getAssociationDataForCollection($responseResults, 'calls', 'contacts');\n $associationCompanies = $this->getAssociationDataForCollection($responseResults, 'calls', 'companies');\n $associationDeals = $this->getAssociationDataForCollection($responseResults, 'calls', 'deals');\n\n foreach ($responseResults as $call) {\n $call['associations'] = [\n 'contacts' => $this->importAssociationData($call, $associationContacts),\n 'companies' => $this->importAssociationData($call, $associationCompanies),\n 'deals' => $this->importAssociationData($call, $associationDeals),\n ];\n\n yield $call;\n }\n $page++;\n } while (! empty($responseResults));\n }\n\n public function getCall(string $callId): array\n {\n $this->logger->info('[HubSpot] Get call', [\n 'call_id' => $callId,\n ]);\n\n $searchAttributes = $this->payloadBuilder->getSearchCallAttributes();\n $endpoint = sprintf(\n 'https://api.hubapi.com/crm/v3/objects/calls/%s',\n $callId,\n );\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'GET',\n $endpoint,\n [],\n sprintf(\n 'properties=%s&associations=contacts,companies,deals',\n implode(',', $searchAttributes),\n ),\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Get call failed', [\n 'call_id' => $callId,\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n return empty($response) ? [] : $response->toArray();\n }\n\n public function bulkAddPlaybackURLToDescription(array $crmUpdateData): array\n {\n $crmUpdateBatches = array_chunk($crmUpdateData, self::BATCH_UPDATE_LIMIT);\n\n $updatedCrmIds = [];\n\n foreach ($crmUpdateBatches as $crmBatch) {\n $payload = $this->payloadBuilder->generatePlaybackAddUrlBatchPayload($crmBatch);\n $updateSuccess = $this->bulkAddPlaybackURLToDescriptionRequest($payload);\n if ($updateSuccess) {\n $updatedCrmIds = array_merge($updatedCrmIds, array_column($crmBatch, 'crm_id'));\n }\n }\n\n return $updatedCrmIds;\n }\n\n private function bulkAddPlaybackURLToDescriptionRequest(array $payload, bool $retry = true): bool\n {\n try {\n $this->client->getNewInstance()->crm()->objects()->batchApi()->update('calls', $payload);\n\n return true;\n } catch (\\HubSpot\\Client\\Crm\\Objects\\ApiException $e) {\n $response = json_decode($e->getResponseBody(), true);\n $retryAfter =\n isset($response['policyName'])\n && $response['policyName'] == self::TEN_SECONDLY_ROLLING_POLICY\n ? self::TEN_SECONDLY_ROLLING_LIMIT\n : 1;\n } catch (Exception $e) {\n $retryAfter = 1;\n }\n\n $this->logger->warning('[HubSpot] Bulk add playback url to CRM failed', [\n 'reason' => $e->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep($retryAfter);\n\n return $this->bulkAddPlaybackURLToDescriptionRequest($payload, false);\n }\n\n return false;\n }\n\n /**\n * Sometimes we have secondly rate limit error, then retry request after 1 second\n */\n public function searchCallByRecordingURLToken(string $playbackURLToken, bool $retry = true): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n $payload = $this->payloadBuilder->generateSearchCallByTokenPayload($playbackURLToken);\n\n $this->logger->info('[HubSpot] CRM Search by playback URL token requested', [\n 'request' => $payload,\n ]);\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, ['json' => ($payload)]);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search by playback URL token failed', [\n 'playbackURLToken' => $playbackURLToken,\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallByRecordingURLToken($playbackURLToken, false);\n }\n\n return [];\n }\n\n return empty($response['results']) ? [] : $response['results'][0];\n }\n\n /**\n * Generate transcription for the activity.\n */\n private function generateTranscription(Activity $activity): string\n {\n if (! $this->config->store_transcript) {\n // If sending transcription to activity toggle is disabled\n return '';\n }\n\n $transcriptionSegments = $this->transcriptionService->findTranscriptionByActivity($activity);\n\n if ($transcriptionSegments->isEmpty()) {\n return '';\n }\n\n $transcription = sprintf(\n '<p><strong>Transcript for %s</strong></p><p></p>',\n $activity->title ?? $activity->activity_title,\n );\n\n $roomOwnerParticipant = $activity->findParticipantRoomOwner();\n $roomOwnerParticipantId = $roomOwnerParticipant !== null\n ? $roomOwnerParticipant->getId()\n : null;\n\n\n $transcription .= $transcriptionSegments\n ->map(static function (array $transcriptionSegment) use ($roomOwnerParticipantId): string {\n $isOrganiser = $roomOwnerParticipantId === $transcriptionSegment['participantId']\n && $roomOwnerParticipantId !== null;\n $transcriptColor = $isOrganiser ? '#000000' : '#f0415a';\n\n return sprintf(\n '<span style=\"color: %s;\">%s | </span>%s',\n $transcriptColor,\n $transcriptionSegment['formattedStartsAt'],\n $transcriptionSegment['transcript'],\n );\n })\n ->implode('<br />');\n\n return $transcription;\n }\n\n /**\n * @param array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }> $options\n *\n * @return FieldData[]\n */\n private function importOptions(Field $field, array $options): array\n {\n $fieldValues = [];\n $values = [];\n $sequence = 0;\n\n foreach ($options as $option) {\n $values[] = [\n 'value' => $option['value'] ?? $option['id'],\n 'label' => substr($option['label'], 0, 255),\n 'sequence' => $sequence++,\n ];\n }\n\n $fieldsToPurge = $field->values()->get()->pluck('value')->toArray();\n\n foreach ($values as $value) {\n $value['value'] = substr($value['value'], 0, 255);\n $fieldValues[] = $field->values()->updateOrCreate([\n 'value' => $value['value'],\n ], $value);\n\n // Remove this value from the ones we are going to purge.\n if (($key = array_search($value['value'], $fieldsToPurge, false)) !== false) {\n unset($fieldsToPurge[$key]);\n }\n }\n\n // Delete the old values that are no longer used.\n $field->values()->whereIn('value', $fieldsToPurge)->delete();\n\n return $fieldValues;\n }\n\n public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null || $objectId === null) {\n return null;\n }\n\n /** @var User $user */\n $user = $activity->getUser();\n\n $profile = $this->assignCrmOwner($user, $activity);\n if (! $profile instanceof Profile) {\n return null;\n }\n\n $timestamp = Carbon::now($user->getTimezone())->getTimestamp() * 1000;\n $engagement = [\n 'active' => true,\n 'ownerId' => $profile->getAttribute('crm_provider_id'),\n 'timestamp' => $timestamp,\n 'type' => 'NOTE',\n ];\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $body = mb_strimwidth($body, 0, self::ENGAGEMENT_BODY_MAX_LENGTH);\n $metadata = [\n 'body' => $body,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsActivityId = $this->client->createNote(\n body: $body,\n ownerId: $profile->getCrmProviderId(),\n timestamp: $timestamp,\n objectId: $objectId,\n noteObject: $noteObject,\n );\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $this->logger->info('[HubSpot] Saving Transcription Summary as Note', [\n 'activity' => $activity->getUuid(),\n 'crmActivity' => $hsActivityId,\n ]);\n\n return $hsActivityId;\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function attachSummaryToActivity(ActivityContract $activity, string $summaryTitle, string $summaryContents): bool\n {\n $this->logger->info('[HubSpot] Attaching summary to activity', [\n 'activity' => $activity->getUuid(),\n 'summary_content' => $summaryContents,\n ]);\n\n if (! $activity instanceof Activity) {\n throw new InvalidArgumentException('Expected instance of Activity');\n }\n\n $summary = '<p><strong>' . $summaryTitle . '</strong></p>';\n $summary .= '<p>' . $summaryContents . '</p>';\n $metadata = $this->buildMetadataForSummaryUpdate($activity, $summary);\n\n try {\n $type = $this->matchActivityEngagementType($activity);\n $engagement = ['type' => $type];\n\n $this->client->updateEngagement($activity->getCrmProviderId(), $engagement, $metadata);\n } catch (Exception $e) {\n $this->logger->warning('[HubSpot] Update summary failed', [\n 'activity' => $activity->getUuid(),\n 'reason' => $e->getMessage(),\n ]);\n\n return false;\n }\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $activity->getCrmProviderId()],\n $metadata,\n );\n\n return true;\n }\n\n private function buildMetadataForSummaryUpdate(Activity $activity, string $summary): array\n {\n $descriptionField = $activity->getType() === Activity::TYPE_CONFERENCE ? 'internalMeetingNotes' : 'body';\n $engagement = $this->client->getEngagementData($activity->getCrmProviderId());\n // Meeting without internalMeetingNotes might mean it just does not have any notes;\n $description = $engagement['metadata'][$descriptionField] ?? null;\n\n if (empty($description)) {\n $data = $summary;\n } else {\n // avoid playbook url link to Jiminny being sent twice in the activity description\n $targetUrl = PlaybackUrlBuilder::build($activity);\n\n if (str_contains($description, $targetUrl)) {\n $jiminnyUrl = '<p><a href=\"' . $targetUrl . '\" title=\"Play at Jiminny\">Play at Jiminny</a></p>';\n $summary = str_replace($jiminnyUrl, '', $summary);\n\n $this->logger->info('[HubSpot] Summary modified', [\n 'activity' => $activity->getUuid(),\n 'target_url' => $jiminnyUrl,\n 'modified_summary_content' => $summary,\n ]);\n }\n\n $data = $description . '<p></p>' . $summary;\n }\n\n return [\n $descriptionField => $data,\n ];\n }\n\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n return $this->syncRelatedActivityManager->fetchAndAssociateRelatedActivity($activity);\n }\n\n public function fetchRelatedActivity(Activity $activity): array\n {\n return [];\n }\n\n public function getDealsInBulk(array $dealIds): array\n {\n $payload = $this->payloadBuilder->getDealsInBulkPayload($dealIds);\n\n return $this->client->getPaginatedData($payload, 'deals');\n }\n\n /**\n * Extract deal IDs from HubSpot search response.\n *\n * @param array $hubspotResponse The raw HubSpot search API response.\n * @param bool $includeArchived Whether to include archived deals (default: false).\n *\n * @return string[] Array of deal IDs as strings.\n */\n public function extractDealIds(array $hubspotResponse, bool $includeArchived = false): array\n {\n if (empty($hubspotResponse['results'])) {\n return [];\n }\n\n return array_values(\n array_map(\n fn ($deal) => $deal['id'],\n array_filter(\n $hubspotResponse['results'],\n fn ($deal) => $includeArchived || empty($deal['archived'])\n )\n )\n );\n }\n\n public function matchActivityEngagementType(Activity $activity): string\n {\n return match ($activity->getType()) {\n Activity::TYPE_CONFERENCE => self::TYPE_MEETING,\n Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND => self::TYPE_CALL,\n default => self::TYPE_NOTE,\n };\n }\n\n private function assignCrmOwner(User $user, ActivityContract $activity): ?Profile\n {\n $profile = $user->getProfile();\n if ($profile instanceof Profile) {\n return $profile;\n }\n\n $this->logger->info('[HubSpot] Unable to save summary. No profile', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n private static function getDealsPipelinesEndpoint(): string\n {\n return self::API_URL . self::ENDPOINT_PIPELINES . self::PIPELINE_OBJECT_TYPE_DEALS;\n }\n\n public function verifyTaskExists(Activity $activity): bool\n {\n $crmProviderId = $activity->getCrmProviderId();\n $cacheKey = \"crm_task_exists:{$this->config->getId()}:$crmProviderId\";\n\n return Cache::remember($cacheKey, self::TASK_VERIFICATION_CACHE_TTL, function () use ($crmProviderId) {\n try {\n $engagement = $this->client->getEngagementData($crmProviderId);\n\n return ! empty($engagement);\n } catch (HttpNotFoundException|BadRequest) {\n // Engagement not found in CRM - this is expected and permanent\n $this->logger->info('[Hubspot] Engagement not found during verification', [\n 'engagement_id' => $crmProviderId,\n 'config_id' => $this->config->getId(),\n ]);\n\n return false;\n }\n // Let other exceptions (network errors, rate limits, etc.) bubble up for retry\n });\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3248289386434438233
|
-465722764674590617
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring start {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring end {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
Sync Changes
Hide This Notification
Code changed:
Hide
8
51
1
33
1
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Services\Crm\Hubspot;
use Carbon\Carbon;
use Exception;
use Generator;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Cache;
use InvalidArgumentException;
use Jiminny\Contracts\Repositories\TeamRepository;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\HubspotInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SavePlaybackLinkToCrmInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Contracts\Services\Crm\VerifyTaskExistsInterface;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\HttpNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contact;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Participant;
use Jiminny\Models\Playbook;
use Jiminny\Models\SocialAccount;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Repositories\Crm\FieldRepository;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\ParticipantRepository;
use Jiminny\Services\Avatar\ProspectPhotoPathService;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\Hubspot\Actions\SyncArchivedProfilesAction;
use Jiminny\Services\Crm\Hubspot\Fields\ValueNormalizer;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\OpportunitySyncTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncFieldsTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\WriteCrmTrait;
use Jiminny\Services\Crm\MatchDomainByEmailInterface;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Services\Crm\ResolveCompanyNameByEmailTrait;
use Jiminny\Utils\PlaybackUrlBuilder;
use Sentry;
use SevenShores\Hubspot\Exceptions\BadRequest;
use Throwable;
use UnexpectedValueException;
/**
* @phpstan-type CrmFieldDefinition array{
* name: string,
* label: string,
* description: string,
* type: string,
* fieldType: string,
* hidden: bool,
* showCurrencySymbol: bool,
* options: array<array{
* id: string,
* label: string,
* value?: string,
* }
*/
class Service extends BaseService implements
HubspotInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
SendSummaryToCrmInterface,
MatchDomainByEmailInterface,
SavePlaybackLinkToCrmInterface,
RemoteEntityManipulationInterface,
FetchRelatedActivityInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
VerifyTaskExistsInterface
{
use ResolveCompanyNameByEmailTrait;
use SyncCrmEntitiesTrait;
use WriteCrmTrait;
use SyncFieldsTrait;
use OpportunitySyncTrait;
private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;
private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';
private const int BATCH_UPDATE_LIMIT = 100;
private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';
private const int TEN_SECONDLY_ROLLING_LIMIT = 10;
private const string CALLS_SEARCH_ENDPOINT = '[URL_WITH_CREDENTIALS] ClientInterface|Client
*/
protected $client;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected ProspectPhotoPathService $prospectPhotoPathService;
private SyncFieldAction $syncFieldAction;
private PayloadBuilder $payloadBuilder;
private SyncRelatedActivityManager $syncRelatedActivityManager;
private SyncArchivedProfilesAction $syncArchivedProfilesAction;
private WebhookSyncBatchProcessor $batchProcessor;
public function __construct(
Client $client,
SyncFieldAction $syncFieldAction,
PayloadBuilder $payloadBuilder,
ProspectPhotoPathService $prospectPhotoPathService,
SyncArchivedProfilesAction $syncArchivedProfilesAction,
WebhookSyncBatchProcessor $batchProcessor,
) {
parent::__construct();
$this->client = $client;
$this->syncFieldAction = $syncFieldAction;
$this->prospectPhotoPathService = $prospectPhotoPathService;
$this->payloadBuilder = $payloadBuilder;
$this->syncArchivedProfilesAction = $syncArchivedProfilesAction;
$this->batchProcessor = $batchProcessor;
$this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [
'client' => $this->client,
]);
$this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [
'client' => $this->client,
'payloadBuilder' => $this->payloadBuilder,
'logger' => $this->logger,
]);
$this->crmEntityRepository = app(CrmEntityRepository::class);
$this->dealFieldsService = app(DealFieldsService::class);
}
public function getDisplayName(): string
{
return 'HubSpot';
}
protected function getOAuthAccount(User $user): ?SocialAccount
{
// In this case, the Account Owner is always the connection for any API operations.
$owner = $user->team->owner;
return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);
}
public function getClient(): Client
{
/** @var Client */
return $this->client;
}
/**
* Convert raw field data into a format compatible with CRM APIs.
*
* @param bool $internal Direction of the conversion.
* True is pulling from CRM, false normalize before sending to CRM.
*/
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return ValueNormalizer::normalize(
fieldType: $fieldType,
fieldValue: $fieldValue,
isInbound: $internal,
);
}
/**
* @inheritdoc
*/
public function getDefaultFields(string $activityType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
$defaultFields = FieldDefinitions::defaultTaskFields();
// This lazy creates these fields if not already setup.
foreach ($defaultFields as $defaultField) {
$fields[] = $this->config->fields()->firstOrCreate($defaultField);
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function getDefaultActivityField(string $activityType): Field
{
/** @var Field $activityField */
$activityField = $this->config->fields()->where([
'crm_provider_id' => 'activityType',
'object_type' => $activityType,
])->first();
return $activityField;
}
/**
* @inheritdoc
*/
public function getSupportedPlaybookTypes(): array
{
return [Playbook::ACTIVITY_TYPE_TASK];
}
/**
* @inheritdoc
*/
public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
// Outcome should always be provided calls/meetings.
$fieldData = [
[
'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',
'object_type' => Field::OBJECT_TASK,
],
];
foreach ($fieldData as $data) {
$field = $this->config->fields()->where($data)->first();
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
}
return $fields;
}
public function getDealInsightsFields(): array
{
return FieldDefinitions::dealInsightsFields();
}
protected function getDefaultFollowupLayoutFields(string $activityType): array
{
$fields = [];
$fieldRepo = app(FieldRepository::class);
$fieldData = FieldDefinitions::followupFieldsFilter();
foreach ($fieldData as $data) {
$field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function syncField(Field $field): void
{
switch ($field->object_type) {
case Field::OBJECT_ACCOUNT:
$crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_CONTACT:
$crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_OPPORTUNITY:
$crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_TASK:
$this->syncSingleTaskField($field);
return;
default:
return;
}
$this->syncFieldAction->execute($field, $crmField->toArray());
}
/**
* @param array<array{
* id:string,
* label:string,
* value?:string
* }> $options
*
* @throws CrmException
*
* @return FieldData[]
*
*/
public function importPicklistValues(
Field $field,
array $options = [['id' => '', 'label' => '', 'value' => '']],
): array {
if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {
// We already have the options, no need to fetch them again
return $this->importOptions($field, $options);
}
$options = [];
switch ($field->getObjectType()) {
case Field::OBJECT_ACCOUNT:
$options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());
break;
case Field::OBJECT_CONTACT:
$options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());
break;
case Field::OBJECT_OPPORTUNITY:
// Hubspot has different endpoint for stages
$options = $this->getClient()->fetchOpportunityFieldOptions($field);
break;
case Field::OBJECT_TASK:
if ($field->getCrmProviderId() === 'disposition') {
$options = $this->getClient()->fetchDispositionFieldOptions();
} elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {
$options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);
}
break;
default:
$this->logger->warning('Invalid object type', [
'object_type' => $field->getObjectType(),
'field_id' => $field->getId(),
]);
throw new CrmException('Invalid object type');
}
return $this->importOptions($field, $options);
}
/**
* @inheritdoc
*/
public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage
{
$missingStage = null;
try {
// Use the HubSpot API client instead of the SDK crmPipelines() method
$endpoint = self::getDealsPipelinesEndpoint();
$pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);
$pipelines = $pipelinesResponse->data->results;
} catch (RequestException|BadRequest $exception) {
throw $exception;
}
foreach ($pipelines as $pipeline) {
$stages = [];
// We create a business process to contain the pipeline, and store all stages against it.
$p = ResponseNormalize::normalizePipeline($pipeline);
// Create/update business process for this pipeline
$businessProcess = $this->config->businessProcesses()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'type' => BusinessProcess::TYPE_OPPORTUNITY,
'is_selectable' => $p['active'],
]);
// A record type is really a clone of the business process, used to store which record uses which pipeline.
// Create/update record type clone
$this->config->recordTypes()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'is_selectable' => $p['active'],
'business_process_id' => $businessProcess->id ?? null,
]);
// Stages - fetch all existing stages upfront to avoid N+1 queries
$existingStages = $this->config->stages()
->withTrashed()
->where('type', Stage::TYPE_OPPORTUNITY)
->get()
->keyBy('crm_provider_id');
foreach ($p['stages'] as $dealStage) {
$s = ResponseNormalize::normalizeDealStage($dealStage);
/** @var ?Stage $existingStage */
$existingStage = $existingStages->get($s['id']);
// Restore soft-deleted stages that are now active in HubSpot
if ($existingStage?->trashed() && $s['active']) {
$existingStage->restore();
}
// Upsert stage (updates soft-deleted records without restoring them)
$stage = $this->config->stages()->withTrashed()->updateOrCreate([
'crm_provider_id' => $s['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($s['label'], 0, 50),
'label' => mb_strimwidth($s['label'], 0, 191),
'type' => Stage::TYPE_OPPORTUNITY,
'sequence' => $s['displayOrder'],
'is_selectable' => $s['active'],
'probability' => $s['probability'] * 100,
]);
if ($missingStageName === $s['id']) {
$missingStage = $stage;
}
$stages[] = $stage->id;
}
$businessProcess->stages()->sync($stages);
}
return $missingStage;
}
/**
* @inheritdoc
*/
public function syncOrganization(): void
{
try {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function find(string $name, array $scopes): array
{
$count = $this->limit ?? 20;
$offset = $this->offset ?? 0;
/** @var array<int, array<string, mixed>> */
return Cache::remember(
key: $this->team->getId() . $name . $count . $offset,
ttl: 300,
callback: function () use ($name, $offset, $count): array {
$data = [];
// Use the new V3 API to find contacts based on additional fields.
foreach (['companies', 'contacts'] as $objectType) {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$ownerId = null;
if ($crmAccountId === null) {
return $data;
}
if ($userId) {
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
$ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
$closedStages = $this->getClosedDealStages();
$payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(
$this->config,
$crmAccountId,
$closedStages,
);
$results = $this->client->getPaginatedData($payload, 'deals');
foreach ($results['results'] as $object) {
$properties = $object['properties'];
$amount = null;
if (empty($properties['amount']) === false) {
$currency = $properties['deal_currency_code'] ?? $this->config->default_currency;
// Values can contain commas and any junk so strip them.
$value = (float) preg_replace('/[^\d.]/', '', $properties['amount']);
$amount = formatCurrency($value, $currency);
}
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
if ($businessProcess === null) {
// Import it.
$stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
} else {
$stage = $businessProcess
->stages()
->where('crm_provider_id', $properties['dealstage'])
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
if ($stage === null) {
// Import it.
$stage = $this->importStages(null, $properties['dealstage']);
}
}
$recordType = null;
if ($businessProcess) {
$recordType = $businessProcess->recordTypes()->first();
}
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$record = [
'crmId' => $object['id'],
'name' => $properties['dealname'] ?? 'Unknown Deal',
'value' => $amount,
'won' => $isWon,
'closed' => $isWon || $isLost,
'stage' => [
'id' => $stage?->getUuid() ?? '',
'name' => $stage?->getName() ?? '',
],
];
if ($recordType) {
$record += [
'recordType' => [
'id' => $recordType->id_string,
'name' => $recordType->name,
],
];
}
if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
}
/**
* @inheritdoc
*/
public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array
{
$data = [];
switch ($objectType) {
case 'contact':
$hsObject = 'contact';
break;
case 'account':
$hsObject = 'company';
break;
default:
// This is a hack to prioritise and override a contact/company with a deal.
if ($opportunityId) {
$hsObject = 'deal';
$objectId = $opportunityId;
} else {
throw new InvalidArgumentException('Object type not supported.');
}
}
$engagementTypes = ['meetings', 'tasks'];
foreach ($engagementTypes as $engagementType) {
$payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);
$this->logger->info('[HubSpot] CRM Search requested', [
'request' => $payload,
]);
$engagements = $this->client->getPaginatedData($payload, $engagementType);
foreach ($engagements['results'] as $engagement) {
if ($engagementType == 'meetings') {
$title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';
} elseif ($engagementType == 'tasks') {
$title = $engagement['properties']['hs_task_subject'];
} else {
$title = 'Scheduled meeting';
}
$data[] = [
'crmId' => $engagement['id'],
'subject' => $title,
'due' => $engagement['properties']['hs_timestamp'],
'type' => $engagement['properties']['hs_activity_type'] ?? null,
];
}
}
usort($data, function ($item1, $item2) {
return $item2['due'] <=> $item1['due'];
});
return $data;
}
/**
* Try to find CRM Objects using email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchExactlyByEmail(string $email, ?int $userId = null): ?array
{
$contactProperties = [
'email',
// 'firstname',
// 'lastname',
// 'country',
// 'phone',
// 'mobilephone',
// 'jobtitle',
// 'hubspot_owner_id',
// 'associatedcompanyid',
// 'photo',
];
$contact = null;
$account = null;
try {
$hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);
return null;
if ($hsContact) {
$contact = $this->importContact($hsContact);
$account = $contact->account;
}
$data = $this->convertCrmData($contact, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
} catch (BadRequest $e) {
$this->logger->warning('[HubSpot] Search failed', [
'team_id' => $this->team->getId(),
'search_identifier' => $email,
'reason' => $e->getMessage(),
]);
}
return null;
}
public function getDomain(string $email): ?string
{
return $this->getDomainFromEmail($email);
}
/**
* Try to find CRM objects using domain name of the email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByDomain(string $domain, ?int $userId = null): ?array
{
$companyName = $domain;
// Try to find a company matching their email domain.
$companyProperties = [
'country',
'phone',
'name',
'hs_avatar_filemanager_key',
'industry',
'hubspot_owner_id',
'domain',
];
try {
$hsAccounts = $this->client
->getInstance()
->companies()
->searchByDomain($companyName, $companyProperties);
} catch (Throwable $e) {
$this->logger->info('[HubSpot] Search failed', [
'error' => $e->getMessage(),
'domain' => $domain,
]);
return null;
}
$account = null;
// If there are multiple accounts, don't guess, we'll ask later.
if (\count($hsAccounts->data->results) === 1) {
// Persist this remote object.
$account = $this->syncAccount($hsAccounts->data->results[0]->companyId);
}
$data = $this->convertCrmData(null, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
}
/**
* @return array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array
{
$countryCode = null;
if ($contact && $contact->country_code) {
$countryCode = $contact->country_code;
} elseif ($account && $account->country_code) {
$countryCode = $account->country_code;
}
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact ? $contact->crm_provider_id : null,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
// If there are multiple opportunities, don't guess, we'll ask later.
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
protected function getCacheKey(string $object, ?int $userId = null): ?string
{
$key = $this->team->getId() . $object;
$keySuffix = $this->getOwnerKeySuffix($userId);
return $key . $keySuffix;
}
private function getOwnerKeySuffix(?int $userId = null): string
{
return $userId === null ? '' : (string) $userId;
}
/**
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
*}
*/
public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array
{
if (str_contains($phone, '**')) {
return null;
}
// trim all whitespaces if present so the lookup doesn't fail
$phone = str_replace(' ', '', $phone);
// Check if the user is internal.
if ($this->isPhoneNumberOfTeamMember($phone)) {
return null;
}
$response = $this->searchForPhoneNumber($phone);
if (empty($response)) {
return null;
}
// This would ideally importContact instead but the response type differs.
$contact = $this->findAndSyncContact($response['results'][0]['id']);
if (! $contact instanceof Contact) {
return null;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account?->crm_provider_id,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
try {
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
} catch (Exception $e) {
$this->logger->debug('[HubSpot] Opportunity failed to sync.', [
'reason' => $e->getMessage(),
]);
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
private function isPhoneNumberOfTeamMember(string $phone): bool
{
$teamRepository = app(TeamRepository::class);
$user = $teamRepository->findTeamMemberByPhone($this->team, $phone);
if ($user instanceof User) {
return true;
}
return false;
}
private function findAndSyncContact(string $crmId): ?Contact
{
try {
return $this->syncContact($crmId);
} catch (Exception $exception) {
$this->logger->info('[HubSpot] Phone match failed', [
'reason' => $exception->getMessage(),
]);
return null;
}
}
private function hasResults(array $response): bool
{
return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;
}
private function searchForPhoneNumber(string $phone): array
{
// Normalizes the provided phone number for the API search.
$normalizedPhone = $this->normalizePhoneNumber($phone);
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);
$this->logger->info('[HubSpot] Phone match search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);
if (! $this->hasResults($response)) {
$nationalPhone = preg_replace('/\D/', '', phone_national(null, $phone));
$payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);
$this->logger->info('[HubSpot] Phone match national number search triggered', [
'phone' => $phone,
'nationalPhone' => $nationalPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
if (! $this->hasResults($response)) {
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);
$this->logger->info('[HubSpot] Phone match alternative search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
return $this->hasResults($response) ? $response : [];
}
private function handlePhoneSearchRequest(string $phone, array $payload): array
{
$endpoint = '[URL_WITH_CREDENTIALS] null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByName(string $name, ?int $userId = null): ?array
{
// Don't waste time searching for single character strings.
if (\strlen($name) <= 1) {
return null;
}
$cacheKey = $this->getCacheKey($name, $userId);
$result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {
$payload = $this->payloadBuilder->generateSearchContactsByNamePayload(
$name,
$this->getContactFields()
);
$hsContacts = $this->client->getPaginatedData($payload, 'contact');
if (empty($hsContacts['results'])) {
return false;
}
$contact = $this->importContact($hsContacts['results'][0]);
if ($contact === null) {
return false;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
});
return is_array($result) ? $result : null;
}
private function convertActivityAssociations(Activity $activity): array
{
return [
'contactIds' => $this->getParticipantsIds($activity),
'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],
'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],
'ownerIds' => [],
];
}
private function getParticipantsIds(Activity $activity): array
{
$attendees = [];
$participantRepository = app(ParticipantRepository::class);
$participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);
foreach ($participants as $participant) {
if ($participant->user_id || $participant->isCoach()) {
continue;
}
$contact = $participant->contact()->first();
if ($contact && $contact->crm_provider_id) {
$attendees[] = $contact->crm_provider_id;
} else {
if (! empty($participant->name)) {
$attendeeData = $this->fetchMissingAttendeeInfo($participant);
}
if (! empty($attendeeData['id'])) {
$attendees[] = $attendeeData['id'];
}
}
}
if ($activity->hasContact()) {
$attendees[] = $activity->contact->crm_provider_id;
}
return array_unique($attendees);
}
private function fetchMissingAttendeeInfo(Participant $participant): array
{
// Check if we need to look inside an account context.
$activity = $participant->getActivity();
$companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;
// First check the local data.
/** @var Contact[] $contacts */
$contacts = $this->team->contacts()
->with('account')
->where('name', $participant->name)
->whereNotNull('email')
->get();
foreach ($contacts as $contact) {
// If we have a company in scope, check the contact is associated to it.
if (
$companyId !== null
&& ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)
) {
continue;
}
return [
'id' => $contact->crm_provider_id,
'email' => $contact->email,
];
}
$payload = $this->generateNameSearchPayload($participant->name, 0, 20);
try {
$response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);
// TODO add some logic to choose the most suitable contact if multiple
foreach ($response['results'] as $object) {
$properties = $object['properties'];
if (empty($object['properties']) === false) {
// Check the company matches the contact.
// Todo: Move this check inside the API search.
if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {
continue;
}
return [
'id' => $object['id'],
'email' => $properties['email'],
];
}
}
} catch (Exception $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [
'teamId' => $this->team->id_string,
'request' => $payload,
'reason' => $e->getMessage(),
]);
}
return [];
}
/**
* Store transcripts as note engagement.
*
* @throws Exception
*/
public function createTranscriptNotes(Activity $activity): void
{
// For HS no need to...
|
3712
|
NULL
|
NULL
|
NULL
|
|
3715
|
135
|
16
|
2026-05-07T12:37:19.249870+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778157439249_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring start {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring end {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
Sync Changes
Hide This Notification
Code changed:
Hide
8
51
1
33
1
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Services\Crm\Hubspot;
use Carbon\Carbon;
use Exception;
use Generator;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Cache;
use InvalidArgumentException;
use Jiminny\Contracts\Repositories\TeamRepository;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\HubspotInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SavePlaybackLinkToCrmInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Contracts\Services\Crm\VerifyTaskExistsInterface;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\HttpNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contact;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Participant;
use Jiminny\Models\Playbook;
use Jiminny\Models\SocialAccount;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Repositories\Crm\FieldRepository;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\ParticipantRepository;
use Jiminny\Services\Avatar\ProspectPhotoPathService;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\Hubspot\Actions\SyncArchivedProfilesAction;
use Jiminny\Services\Crm\Hubspot\Fields\ValueNormalizer;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\OpportunitySyncTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncFieldsTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\WriteCrmTrait;
use Jiminny\Services\Crm\MatchDomainByEmailInterface;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Services\Crm\ResolveCompanyNameByEmailTrait;
use Jiminny\Utils\PlaybackUrlBuilder;
use Sentry;
use SevenShores\Hubspot\Exceptions\BadRequest;
use Throwable;
use UnexpectedValueException;
/**
* @phpstan-type CrmFieldDefinition array{
* name: string,
* label: string,
* description: string,
* type: string,
* fieldType: string,
* hidden: bool,
* showCurrencySymbol: bool,
* options: array<array{
* id: string,
* label: string,
* value?: string,
* }
*/
class Service extends BaseService implements
HubspotInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
SendSummaryToCrmInterface,
MatchDomainByEmailInterface,
SavePlaybackLinkToCrmInterface,
RemoteEntityManipulationInterface,
FetchRelatedActivityInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
VerifyTaskExistsInterface
{
use ResolveCompanyNameByEmailTrait;
use SyncCrmEntitiesTrait;
use WriteCrmTrait;
use SyncFieldsTrait;
use OpportunitySyncTrait;
private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;
private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';
private const int BATCH_UPDATE_LIMIT = 100;
private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';
private const int TEN_SECONDLY_ROLLING_LIMIT = 10;
private const string CALLS_SEARCH_ENDPOINT = '[URL_WITH_CREDENTIALS] ClientInterface|Client
*/
protected $client;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected ProspectPhotoPathService $prospectPhotoPathService;
private SyncFieldAction $syncFieldAction;
private PayloadBuilder $payloadBuilder;
private SyncRelatedActivityManager $syncRelatedActivityManager;
private SyncArchivedProfilesAction $syncArchivedProfilesAction;
private WebhookSyncBatchProcessor $batchProcessor;
public function __construct(
Client $client,
SyncFieldAction $syncFieldAction,
PayloadBuilder $payloadBuilder,
ProspectPhotoPathService $prospectPhotoPathService,
SyncArchivedProfilesAction $syncArchivedProfilesAction,
WebhookSyncBatchProcessor $batchProcessor,
) {
parent::__construct();
$this->client = $client;
$this->syncFieldAction = $syncFieldAction;
$this->prospectPhotoPathService = $prospectPhotoPathService;
$this->payloadBuilder = $payloadBuilder;
$this->syncArchivedProfilesAction = $syncArchivedProfilesAction;
$this->batchProcessor = $batchProcessor;
$this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [
'client' => $this->client,
]);
$this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [
'client' => $this->client,
'payloadBuilder' => $this->payloadBuilder,
'logger' => $this->logger,
]);
$this->crmEntityRepository = app(CrmEntityRepository::class);
$this->dealFieldsService = app(DealFieldsService::class);
}
public function getDisplayName(): string
{
return 'HubSpot';
}
protected function getOAuthAccount(User $user): ?SocialAccount
{
// In this case, the Account Owner is always the connection for any API operations.
$owner = $user->team->owner;
return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);
}
public function getClient(): Client
{
/** @var Client */
return $this->client;
}
/**
* Convert raw field data into a format compatible with CRM APIs.
*
* @param bool $internal Direction of the conversion.
* True is pulling from CRM, false normalize before sending to CRM.
*/
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return ValueNormalizer::normalize(
fieldType: $fieldType,
fieldValue: $fieldValue,
isInbound: $internal,
);
}
/**
* @inheritdoc
*/
public function getDefaultFields(string $activityType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
$defaultFields = FieldDefinitions::defaultTaskFields();
// This lazy creates these fields if not already setup.
foreach ($defaultFields as $defaultField) {
$fields[] = $this->config->fields()->firstOrCreate($defaultField);
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function getDefaultActivityField(string $activityType): Field
{
/** @var Field $activityField */
$activityField = $this->config->fields()->where([
'crm_provider_id' => 'activityType',
'object_type' => $activityType,
])->first();
return $activityField;
}
/**
* @inheritdoc
*/
public function getSupportedPlaybookTypes(): array
{
return [Playbook::ACTIVITY_TYPE_TASK];
}
/**
* @inheritdoc
*/
public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
// Outcome should always be provided calls/meetings.
$fieldData = [
[
'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',
'object_type' => Field::OBJECT_TASK,
],
];
foreach ($fieldData as $data) {
$field = $this->config->fields()->where($data)->first();
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
}
return $fields;
}
public function getDealInsightsFields(): array
{
return FieldDefinitions::dealInsightsFields();
}
protected function getDefaultFollowupLayoutFields(string $activityType): array
{
$fields = [];
$fieldRepo = app(FieldRepository::class);
$fieldData = FieldDefinitions::followupFieldsFilter();
foreach ($fieldData as $data) {
$field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function syncField(Field $field): void
{
switch ($field->object_type) {
case Field::OBJECT_ACCOUNT:
$crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_CONTACT:
$crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_OPPORTUNITY:
$crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_TASK:
$this->syncSingleTaskField($field);
return;
default:
return;
}
$this->syncFieldAction->execute($field, $crmField->toArray());
}
/**
* @param array<array{
* id:string,
* label:string,
* value?:string
* }> $options
*
* @throws CrmException
*
* @return FieldData[]
*
*/
public function importPicklistValues(
Field $field,
array $options = [['id' => '', 'label' => '', 'value' => '']],
): array {
if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {
// We already have the options, no need to fetch them again
return $this->importOptions($field, $options);
}
$options = [];
switch ($field->getObjectType()) {
case Field::OBJECT_ACCOUNT:
$options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());
break;
case Field::OBJECT_CONTACT:
$options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());
break;
case Field::OBJECT_OPPORTUNITY:
// Hubspot has different endpoint for stages
$options = $this->getClient()->fetchOpportunityFieldOptions($field);
break;
case Field::OBJECT_TASK:
if ($field->getCrmProviderId() === 'disposition') {
$options = $this->getClient()->fetchDispositionFieldOptions();
} elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {
$options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);
}
break;
default:
$this->logger->warning('Invalid object type', [
'object_type' => $field->getObjectType(),
'field_id' => $field->getId(),
]);
throw new CrmException('Invalid object type');
}
return $this->importOptions($field, $options);
}
/**
* @inheritdoc
*/
public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage
{
$missingStage = null;
try {
// Use the HubSpot API client instead of the SDK crmPipelines() method
$endpoint = self::getDealsPipelinesEndpoint();
$pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);
$pipelines = $pipelinesResponse->data->results;
} catch (RequestException|BadRequest $exception) {
throw $exception;
}
foreach ($pipelines as $pipeline) {
$stages = [];
// We create a business process to contain the pipeline, and store all stages against it.
$p = ResponseNormalize::normalizePipeline($pipeline);
// Create/update business process for this pipeline
$businessProcess = $this->config->businessProcesses()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'type' => BusinessProcess::TYPE_OPPORTUNITY,
'is_selectable' => $p['active'],
]);
// A record type is really a clone of the business process, used to store which record uses which pipeline.
// Create/update record type clone
$this->config->recordTypes()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'is_selectable' => $p['active'],
'business_process_id' => $businessProcess->id ?? null,
]);
// Stages - fetch all existing stages upfront to avoid N+1 queries
$existingStages = $this->config->stages()
->withTrashed()
->where('type', Stage::TYPE_OPPORTUNITY)
->get()
->keyBy('crm_provider_id');
foreach ($p['stages'] as $dealStage) {
$s = ResponseNormalize::normalizeDealStage($dealStage);
/** @var ?Stage $existingStage */
$existingStage = $existingStages->get($s['id']);
// Restore soft-deleted stages that are now active in HubSpot
if ($existingStage?->trashed() && $s['active']) {
$existingStage->restore();
}
// Upsert stage (updates soft-deleted records without restoring them)
$stage = $this->config->stages()->withTrashed()->updateOrCreate([
'crm_provider_id' => $s['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($s['label'], 0, 50),
'label' => mb_strimwidth($s['label'], 0, 191),
'type' => Stage::TYPE_OPPORTUNITY,
'sequence' => $s['displayOrder'],
'is_selectable' => $s['active'],
'probability' => $s['probability'] * 100,
]);
if ($missingStageName === $s['id']) {
$missingStage = $stage;
}
$stages[] = $stage->id;
}
$businessProcess->stages()->sync($stages);
}
return $missingStage;
}
/**
* @inheritdoc
*/
public function syncOrganization(): void
{
try {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function find(string $name, array $scopes): array
{
$count = $this->limit ?? 20;
$offset = $this->offset ?? 0;
/** @var array<int, array<string, mixed>> */
return Cache::remember(
key: $this->team->getId() . $name . $count . $offset,
ttl: 300,
callback: function () use ($name, $offset, $count): array {
$data = [];
// Use the new V3 API to find contacts based on additional fields.
foreach (['companies', 'contacts'] as $objectType) {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$ownerId = null;
if ($crmAccountId === null) {
return $data;
}
if ($userId) {
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
$ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
$closedStages = $this->getClosedDealStages();
$payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(
$this->config,
$crmAccountId,
$closedStages,
);
$results = $this->client->getPaginatedData($payload, 'deals');
foreach ($results['results'] as $object) {
$properties = $object['properties'];
$amount = null;
if (empty($properties['amount']) === false) {
$currency = $properties['deal_currency_code'] ?? $this->config->default_currency;
// Values can contain commas and any junk so strip them.
$value = (float) preg_replace('/[^\d.]/', '', $properties['amount']);
$amount = formatCurrency($value, $currency);
}
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
if ($businessProcess === null) {
// Import it.
$stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
} else {
$stage = $businessProcess
->stages()
->where('crm_provider_id', $properties['dealstage'])
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
if ($stage === null) {
// Import it.
$stage = $this->importStages(null, $properties['dealstage']);
}
}
$recordType = null;
if ($businessProcess) {
$recordType = $businessProcess->recordTypes()->first();
}
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$record = [
'crmId' => $object['id'],
'name' => $properties['dealname'] ?? 'Unknown Deal',
'value' => $amount,
'won' => $isWon,
'closed' => $isWon || $isLost,
'stage' => [
'id' => $stage?->getUuid() ?? '',
'name' => $stage?->getName() ?? '',
],
];
if ($recordType) {
$record += [
'recordType' => [
'id' => $recordType->id_string,
'name' => $recordType->name,
],
];
}
if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
}
/**
* @inheritdoc
*/
public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array
{
$data = [];
switch ($objectType) {
case 'contact':
$hsObject = 'contact';
break;
case 'account':
$hsObject = 'company';
break;
default:
// This is a hack to prioritise and override a contact/company with a deal.
if ($opportunityId) {
$hsObject = 'deal';
$objectId = $opportunityId;
} else {
throw new InvalidArgumentException('Object type not supported.');
}
}
$engagementTypes = ['meetings', 'tasks'];
foreach ($engagementTypes as $engagementType) {
$payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);
$this->logger->info('[HubSpot] CRM Search requested', [
'request' => $payload,
]);
$engagements = $this->client->getPaginatedData($payload, $engagementType);
foreach ($engagements['results'] as $engagement) {
if ($engagementType == 'meetings') {
$title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';
} elseif ($engagementType == 'tasks') {
$title = $engagement['properties']['hs_task_subject'];
} else {
$title = 'Scheduled meeting';
}
$data[] = [
'crmId' => $engagement['id'],
'subject' => $title,
'due' => $engagement['properties']['hs_timestamp'],
'type' => $engagement['properties']['hs_activity_type'] ?? null,
];
}
}
usort($data, function ($item1, $item2) {
return $item2['due'] <=> $item1['due'];
});
return $data;
}
/**
* Try to find CRM Objects using email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchExactlyByEmail(string $email, ?int $userId = null): ?array
{
$contactProperties = [
'email',
// 'firstname',
// 'lastname',
// 'country',
// 'phone',
// 'mobilephone',
// 'jobtitle',
// 'hubspot_owner_id',
// 'associatedcompanyid',
// 'photo',
];
$contact = null;
$account = null;
try {
$hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);
return null;
if ($hsContact) {
$contact = $this->importContact($hsContact);
$account = $contact->account;
}
$data = $this->convertCrmData($contact, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
} catch (BadRequest $e) {
$this->logger->warning('[HubSpot] Search failed', [
'team_id' => $this->team->getId(),
'search_identifier' => $email,
'reason' => $e->getMessage(),
]);
}
return null;
}
public function getDomain(string $email): ?string
{
return $this->getDomainFromEmail($email);
}
/**
* Try to find CRM objects using domain name of the email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByDomain(string $domain, ?int $userId = null): ?array
{
$companyName = $domain;
// Try to find a company matching their email domain.
$companyProperties = [
'country',
'phone',
'name',
'hs_avatar_filemanager_key',
'industry',
'hubspot_owner_id',
'domain',
];
try {
$hsAccounts = $this->client
->getInstance()
->companies()
->searchByDomain($companyName, $companyProperties);
} catch (Throwable $e) {
$this->logger->info('[HubSpot] Search failed', [
'error' => $e->getMessage(),
'domain' => $domain,
]);
return null;
}
$account = null;
// If there are multiple accounts, don't guess, we'll ask later.
if (\count($hsAccounts->data->results) === 1) {
// Persist this remote object.
$account = $this->syncAccount($hsAccounts->data->results[0]->companyId);
}
$data = $this->convertCrmData(null, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
}
/**
* @return array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array
{
$countryCode = null;
if ($contact && $contact->country_code) {
$countryCode = $contact->country_code;
} elseif ($account && $account->country_code) {
$countryCode = $account->country_code;
}
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact ? $contact->crm_provider_id : null,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
// If there are multiple opportunities, don't guess, we'll ask later.
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
protected function getCacheKey(string $object, ?int $userId = null): ?string
{
$key = $this->team->getId() . $object;
$keySuffix = $this->getOwnerKeySuffix($userId);
return $key . $keySuffix;
}
private function getOwnerKeySuffix(?int $userId = null): string
{
return $userId === null ? '' : (string) $userId;
}
/**
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
*}
*/
public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array
{
if (str_contains($phone, '**')) {
return null;
}
// trim all whitespaces if present so the lookup doesn't fail
$phone = str_replace(' ', '', $phone);
// Check if the user is internal.
if ($this->isPhoneNumberOfTeamMember($phone)) {
return null;
}
$response = $this->searchForPhoneNumber($phone);
if (empty($response)) {
return null;
}
// This would ideally importContact instead but the response type differs.
$contact = $this->findAndSyncContact($response['results'][0]['id']);
if (! $contact instanceof Contact) {
return null;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account?->crm_provider_id,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
try {
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
} catch (Exception $e) {
$this->logger->debug('[HubSpot] Opportunity failed to sync.', [
'reason' => $e->getMessage(),
]);
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
private function isPhoneNumberOfTeamMember(string $phone): bool
{
$teamRepository = app(TeamRepository::class);
$user = $teamRepository->findTeamMemberByPhone($this->team, $phone);
if ($user instanceof User) {
return true;
}
return false;
}
private function findAndSyncContact(string $crmId): ?Contact
{
try {
return $this->syncContact($crmId);
} catch (Exception $exception) {
$this->logger->info('[HubSpot] Phone match failed', [
'reason' => $exception->getMessage(),
]);
return null;
}
}
private function hasResults(array $response): bool
{
return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;
}
private function searchForPhoneNumber(string $phone): array
{
// Normalizes the provided phone number for the API search.
$normalizedPhone = $this->normalizePhoneNumber($phone);
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);
$this->logger->info('[HubSpot] Phone match search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);
if (! $this->hasResults($response)) {
$nationalPhone = preg_replace('/\D/', '', phone_national(null, $phone));
$payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);
$this->logger->info('[HubSpot] Phone match national number search triggered', [
'phone' => $phone,
'nationalPhone' => $nationalPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
if (! $this->hasResults($response)) {
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);
$this->logger->info('[HubSpot] Phone match alternative search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
return $this->hasResults($response) ? $response : [];
}
private function handlePhoneSearchRequest(string $phone, array $payload): array
{
$endpoint = '[URL_WITH_CREDENTIALS] null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByName(string $name, ?int $userId = null): ?array
{
// Don't waste time searching for single character strings.
if (\strlen($name) <= 1) {
return null;
}
$cacheKey = $this->getCacheKey($name, $userId);
$result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {
$payload = $this->payloadBuilder->generateSearchContactsByNamePayload(
$name,
$this->getContactFields()
);
$hsContacts = $this->client->getPaginatedData($payload, 'contact');
if (empty($hsContacts['results'])) {
return false;
}
$contact = $this->importContact($hsContacts['results'][0]);
if ($contact === null) {
return false;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
});
return is_array($result) ? $result : null;
}
private function convertActivityAssociations(Activity $activity): array
{
return [
'contactIds' => $this->getParticipantsIds($activity),
'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],
'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],
'ownerIds' => [],
];
}
private function getParticipantsIds(Activity $activity): array
{
$attendees = [];
$participantRepository = app(ParticipantRepository::class);
$participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);
foreach ($participants as $participant) {
if ($participant->user_id || $participant->isCoach()) {
continue;
}
$contact = $participant->contact()->first();
if ($contact && $contact->crm_provider_id) {
$attendees[] = $contact->crm_provider_id;
} else {
if (! empty($participant->name)) {
$attendeeData = $this->fetchMissingAttendeeInfo($participant);
}
if (! empty($attendeeData['id'])) {
$attendees[] = $attendeeData['id'];
}
}
}
if ($activity->hasContact()) {
$attendees[] = $activity->contact->crm_provider_id;
}
return array_unique($attendees);
}
private function fetchMissingAttendeeInfo(Participant $participant): array
{
// Check if we need to look inside an account context.
$activity = $participant->getActivity();
$companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;
// First check the local data.
/** @var Contact[] $contacts */
$contacts = $this->team->contacts()
->with('account')
->where('name', $participant->name)
->whereNotNull('email')
->get();
foreach ($contacts as $contact) {
// If we have a company in scope, check the contact is associated to it.
if (
$companyId !== null
&& ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)
) {
continue;
}
return [
'id' => $contact->crm_provider_id,
'email' => $contact->email,
];
}
$payload = $this->generateNameSearchPayload($participant->name, 0, 20);
try {
$response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);
// TODO add some logic to choose the most suitable contact if multiple
foreach ($response['results'] as $object) {
$properties = $object['properties'];
if (empty($object['properties']) === false) {
// Check the company matches the contact.
// Todo: Move this check inside the API search.
if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {
continue;
}
return [
'id' => $object['id'],
'email' => $properties['email'],
];
}
}
} catch (Exception $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [
'teamId' => $this->team->id_string,
'request' => $payload,
'reason' => $e->getMessage(),
]);
}
return [];
}
/**
* Store transcripts as note engagement.
*
* @throws Exception
*/
public function createTranscriptNotes(Activity $activity): void
{
// For HS no need to...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring start {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring end {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring start {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring end {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"51","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"33","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse Carbon\\Carbon;\nuse Exception;\nuse Generator;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Illuminate\\Support\\Facades\\Cache;\nuse InvalidArgumentException;\nuse Jiminny\\Contracts\\Repositories\\TeamRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\HubspotInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SavePlaybackLinkToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\VerifyTaskExistsInterface;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\HttpNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Participant;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Repositories\\Crm\\FieldRepository;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\ParticipantRepository;\nuse Jiminny\\Services\\Avatar\\ProspectPhotoPathService;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\Hubspot\\Actions\\SyncArchivedProfilesAction;\nuse Jiminny\\Services\\Crm\\Hubspot\\Fields\\ValueNormalizer;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\OpportunitySyncTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncFieldsTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\WriteCrmTrait;\nuse Jiminny\\Services\\Crm\\MatchDomainByEmailInterface;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Services\\Crm\\ResolveCompanyNameByEmailTrait;\nuse Jiminny\\Utils\\PlaybackUrlBuilder;\nuse Sentry;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse Throwable;\nuse UnexpectedValueException;\n\n/**\n * @phpstan-type CrmFieldDefinition array{\n * name: string,\n * label: string,\n * description: string,\n * type: string,\n * fieldType: string,\n * hidden: bool,\n * showCurrencySymbol: bool,\n * options: array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }\n */\nclass Service extends BaseService implements\n HubspotInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n SendSummaryToCrmInterface,\n MatchDomainByEmailInterface,\n SavePlaybackLinkToCrmInterface,\n RemoteEntityManipulationInterface,\n FetchRelatedActivityInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n VerifyTaskExistsInterface\n{\n use ResolveCompanyNameByEmailTrait;\n use SyncCrmEntitiesTrait;\n use WriteCrmTrait;\n use SyncFieldsTrait;\n use OpportunitySyncTrait;\n\n private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;\n\n private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';\n private const int BATCH_UPDATE_LIMIT = 100;\n private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';\n private const int TEN_SECONDLY_ROLLING_LIMIT = 10;\n private const string CALLS_SEARCH_ENDPOINT = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n\n private const string TYPE_NOTE = 'NOTE';\n\n private const string TYPE_MEETING = 'MEETING';\n\n private const string TYPE_CALL = 'CALL';\n\n private const string API_URL = 'https://api.hubapi.com';\n\n // NB: v1 is legacy - v3 is the newest\n private const string ENDPOINT_PIPELINES = '/crm-pipelines/v1/pipelines/';\n private const string PIPELINE_OBJECT_TYPE_DEALS = 'deals';\n\n private const int TASK_VERIFICATION_CACHE_TTL = 86400; // 1 day\n\n /**\n * @var ClientInterface|Client\n */\n protected $client;\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected ProspectPhotoPathService $prospectPhotoPathService;\n\n private SyncFieldAction $syncFieldAction;\n private PayloadBuilder $payloadBuilder;\n private SyncRelatedActivityManager $syncRelatedActivityManager;\n private SyncArchivedProfilesAction $syncArchivedProfilesAction;\n private WebhookSyncBatchProcessor $batchProcessor;\n\n public function __construct(\n Client $client,\n SyncFieldAction $syncFieldAction,\n PayloadBuilder $payloadBuilder,\n ProspectPhotoPathService $prospectPhotoPathService,\n SyncArchivedProfilesAction $syncArchivedProfilesAction,\n WebhookSyncBatchProcessor $batchProcessor,\n ) {\n parent::__construct();\n\n $this->client = $client;\n $this->syncFieldAction = $syncFieldAction;\n $this->prospectPhotoPathService = $prospectPhotoPathService;\n $this->payloadBuilder = $payloadBuilder;\n $this->syncArchivedProfilesAction = $syncArchivedProfilesAction;\n $this->batchProcessor = $batchProcessor;\n $this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [\n 'client' => $this->client,\n ]);\n $this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [\n 'client' => $this->client,\n 'payloadBuilder' => $this->payloadBuilder,\n 'logger' => $this->logger,\n ]);\n $this->crmEntityRepository = app(CrmEntityRepository::class);\n $this->dealFieldsService = app(DealFieldsService::class);\n }\n\n public function getDisplayName(): string\n {\n return 'HubSpot';\n }\n\n protected function getOAuthAccount(User $user): ?SocialAccount\n {\n // In this case, the Account Owner is always the connection for any API operations.\n $owner = $user->team->owner;\n\n return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);\n }\n\n public function getClient(): Client\n {\n /** @var Client */\n return $this->client;\n }\n\n /**\n * Convert raw field data into a format compatible with CRM APIs.\n *\n * @param bool $internal Direction of the conversion.\n * True is pulling from CRM, false normalize before sending to CRM.\n */\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return ValueNormalizer::normalize(\n fieldType: $fieldType,\n fieldValue: $fieldValue,\n isInbound: $internal,\n );\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultFields(string $activityType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n $defaultFields = FieldDefinitions::defaultTaskFields();\n\n // This lazy creates these fields if not already setup.\n foreach ($defaultFields as $defaultField) {\n $fields[] = $this->config->fields()->firstOrCreate($defaultField);\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityField(string $activityType): Field\n {\n /** @var Field $activityField */\n $activityField = $this->config->fields()->where([\n 'crm_provider_id' => 'activityType',\n 'object_type' => $activityType,\n ])->first();\n\n return $activityField;\n }\n\n /**\n * @inheritdoc\n */\n public function getSupportedPlaybookTypes(): array\n {\n return [Playbook::ACTIVITY_TYPE_TASK];\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n // Outcome should always be provided calls/meetings.\n $fieldData = [\n [\n 'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',\n 'object_type' => Field::OBJECT_TASK,\n ],\n ];\n\n foreach ($fieldData as $data) {\n $field = $this->config->fields()->where($data)->first();\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n }\n\n return $fields;\n }\n\n public function getDealInsightsFields(): array\n {\n return FieldDefinitions::dealInsightsFields();\n }\n\n protected function getDefaultFollowupLayoutFields(string $activityType): array\n {\n $fields = [];\n $fieldRepo = app(FieldRepository::class);\n $fieldData = FieldDefinitions::followupFieldsFilter();\n\n foreach ($fieldData as $data) {\n $field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function syncField(Field $field): void\n {\n switch ($field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_CONTACT:\n $crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_OPPORTUNITY:\n $crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_TASK:\n $this->syncSingleTaskField($field);\n\n return;\n default:\n return;\n }\n\n $this->syncFieldAction->execute($field, $crmField->toArray());\n }\n\n /**\n * @param array<array{\n * id:string,\n * label:string,\n * value?:string\n * }> $options\n *\n * @throws CrmException\n *\n * @return FieldData[]\n *\n */\n public function importPicklistValues(\n Field $field,\n array $options = [['id' => '', 'label' => '', 'value' => '']],\n ): array {\n if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {\n // We already have the options, no need to fetch them again\n return $this->importOptions($field, $options);\n }\n\n $options = [];\n\n switch ($field->getObjectType()) {\n case Field::OBJECT_ACCOUNT:\n $options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_CONTACT:\n $options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n // Hubspot has different endpoint for stages\n $options = $this->getClient()->fetchOpportunityFieldOptions($field);\n\n break;\n\n case Field::OBJECT_TASK:\n if ($field->getCrmProviderId() === 'disposition') {\n $options = $this->getClient()->fetchDispositionFieldOptions();\n } elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {\n $options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);\n }\n\n break;\n\n default:\n $this->logger->warning('Invalid object type', [\n 'object_type' => $field->getObjectType(),\n 'field_id' => $field->getId(),\n ]);\n\n throw new CrmException('Invalid object type');\n }\n\n return $this->importOptions($field, $options);\n }\n\n /**\n * @inheritdoc\n */\n public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage\n {\n $missingStage = null;\n\n try {\n // Use the HubSpot API client instead of the SDK crmPipelines() method\n $endpoint = self::getDealsPipelinesEndpoint();\n $pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);\n $pipelines = $pipelinesResponse->data->results;\n } catch (RequestException|BadRequest $exception) {\n throw $exception;\n }\n\n foreach ($pipelines as $pipeline) {\n $stages = [];\n\n // We create a business process to contain the pipeline, and store all stages against it.\n $p = ResponseNormalize::normalizePipeline($pipeline);\n\n // Create/update business process for this pipeline\n $businessProcess = $this->config->businessProcesses()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'type' => BusinessProcess::TYPE_OPPORTUNITY,\n 'is_selectable' => $p['active'],\n ]);\n\n // A record type is really a clone of the business process, used to store which record uses which pipeline.\n // Create/update record type clone\n $this->config->recordTypes()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'is_selectable' => $p['active'],\n 'business_process_id' => $businessProcess->id ?? null,\n ]);\n\n // Stages - fetch all existing stages upfront to avoid N+1 queries\n $existingStages = $this->config->stages()\n ->withTrashed()\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->get()\n ->keyBy('crm_provider_id');\n\n foreach ($p['stages'] as $dealStage) {\n $s = ResponseNormalize::normalizeDealStage($dealStage);\n\n /** @var ?Stage $existingStage */\n $existingStage = $existingStages->get($s['id']);\n\n // Restore soft-deleted stages that are now active in HubSpot\n if ($existingStage?->trashed() && $s['active']) {\n $existingStage->restore();\n }\n\n // Upsert stage (updates soft-deleted records without restoring them)\n $stage = $this->config->stages()->withTrashed()->updateOrCreate([\n 'crm_provider_id' => $s['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($s['label'], 0, 50),\n 'label' => mb_strimwidth($s['label'], 0, 191),\n 'type' => Stage::TYPE_OPPORTUNITY,\n 'sequence' => $s['displayOrder'],\n 'is_selectable' => $s['active'],\n 'probability' => $s['probability'] * 100,\n ]);\n\n if ($missingStageName === $s['id']) {\n $missingStage = $stage;\n }\n\n $stages[] = $stage->id;\n }\n\n $businessProcess->stages()->sync($stages);\n }\n\n return $missingStage;\n }\n\n /**\n * @inheritdoc\n */\n public function syncOrganization(): void\n {\n try {\n $endpoint = 'https://api.hubapi.com/integrations/v1/me';\n $response = $this->client->getInstance()->getClient()->request('get', $endpoint);\n\n $accountData = $response->data;\n $this->config->update(['default_currency' => $accountData->currency]);\n } catch (BadRequest $e) {\n throw new CrmException('Could not sync the organization.', $e->getCode(), $e);\n }\n }\n\n /**\n * @inheritdoc\n *\n * @throws CrmException\n */\n public function syncProfiles(?User $userToSearch = null): ?Profile\n {\n $this->syncArchivedProfilesAction->execute($this->team, $this->client, $this->config);\n\n try {\n $owners = $this->client->getOwners();\n } catch (\\HubSpot\\Client\\Crm\\Owners\\ApiException $e) {\n $this->logger->error('[HubSpot] Could not sync the profiles.', [\n 'team_id' => $this->team->getId(),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new CrmException('Could not sync the profiles.', $e->getCode(), $e);\n }\n\n $profileRepository = app(ProfileRepository::class);\n $teamRepository = app(TeamRepository::class);\n\n foreach ($owners as $owner) {\n if ($owner->getArchived()) {\n // not supposed to fetch archived, but log anyway\n $this->logger->warning('[HubSpot] Found archived owner', [\n 'crm_provider_id' => $owner->getId(),\n 'email' => $owner->getEmail(),\n ]);\n\n continue;\n }\n\n $email = $owner->getEmail();\n if ($email === null) {\n continue;\n }\n\n $user = $teamRepository->findActiveTeamMemberByEmail($this->team, $email);\n\n if (! $user instanceof User) {\n continue;\n }\n\n $profile = $profileRepository->updateOrCreateProfile($user, [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $owner->getId(),\n ]);\n\n if ($userToSearch && $userToSearch->getId() === $user->getId()) {\n return $profile;\n }\n }\n\n return null;\n }\n\n private function generateNameSearchPayload(string $name, int $offset, int $limit): array\n {\n $payload = [\n 'query' => $name,\n 'sorts' => [\n [\n 'propertyName' => 'modifieddate',\n 'direction' => 'DESCENDING',\n ],\n ],\n 'properties' => [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n 'industry',\n 'name',\n 'company',\n ],\n 'limit' => $limit,\n 'after' => $offset,\n ];\n\n $this->logger->debug('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n return $payload;\n }\n\n /**\n * @inheritdoc\n */\n public function find(string $name, array $scopes): array\n {\n $count = $this->limit ?? 20;\n $offset = $this->offset ?? 0;\n\n /** @var array<int, array<string, mixed>> */\n return Cache::remember(\n key: $this->team->getId() . $name . $count . $offset,\n ttl: 300,\n callback: function () use ($name, $offset, $count): array {\n $data = [];\n\n // Use the new V3 API to find contacts based on additional fields.\n foreach (['companies', 'contacts'] as $objectType) {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/' . $objectType . '/search';\n $payload = $this->generateNameSearchPayload($name, $offset, $count);\n $type = $objectType === 'companies' ? 'account' : 'contact';\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, [\n 'json' => $payload,\n ]);\n\n // Build mapped list.\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n\n $objectName = $this->buildContactName($properties);\n\n $record = [\n 'crmId' => $object['id'],\n // Pass crmUrl to the FE, needed for success message in the extension when you log activity.\n 'crmUrl' => $this->generateProviderUrl($object['id'], $type),\n 'name' => $objectName,\n 'prospectType' => $type,\n 'phoneNumbers' => [],\n ];\n\n if ($type === 'account') {\n $record['industry'] = $properties['industry'] ?? null;\n } else {\n $record['title'] = $properties['jobtitle'] ?? null;\n $record['organization'] = $properties['company'] ?? null;\n }\n\n $countryCode = $this->buildContactCountry($properties);\n $parsedNumber = $this->buildContactPhone($countryCode, $properties);\n\n // Add phone number to record.\n if (! empty($parsedNumber['phone'])) {\n $record['phoneNumbers'][] = [\n 'number' => $parsedNumber['phone'],\n 'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),\n 'type' => 'phone',\n ];\n }\n\n // Add mobile phone number to record.\n if (! empty($properties['mobilephone'])) {\n $mobileNumber = phone_e164($countryCode, $properties['mobilephone']);\n if ($mobileNumber !== null) {\n $record['phoneNumbers'][] = [\n 'number' => $mobileNumber,\n 'nationalFormat' => phone_national($countryCode, $mobileNumber),\n 'type' => 'mobile',\n ];\n }\n }\n\n $data[] = $record;\n }\n } catch (BadRequest $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->getUuid(),\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n }\n\n return $data;\n },\n );\n }\n\n\n /**\n * @inheritdoc\n */\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n $ownerId = null;\n\n if ($crmAccountId === null) {\n return $data;\n }\n\n if ($userId) {\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n $ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n $closedStages = $this->getClosedDealStages();\n $payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(\n $this->config,\n $crmAccountId,\n $closedStages,\n );\n\n $results = $this->client->getPaginatedData($payload, 'deals');\n\n foreach ($results['results'] as $object) {\n $properties = $object['properties'];\n\n $amount = null;\n if (empty($properties['amount']) === false) {\n $currency = $properties['deal_currency_code'] ?? $this->config->default_currency;\n\n // Values can contain commas and any junk so strip them.\n $value = (float) preg_replace('/[^\\d.]/', '', $properties['amount']);\n $amount = formatCurrency($value, $currency);\n }\n\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n\n if ($businessProcess === null) {\n // Import it.\n $stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n } else {\n $stage = $businessProcess\n ->stages()\n ->where('crm_provider_id', $properties['dealstage'])\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n if ($stage === null) {\n // Import it.\n $stage = $this->importStages(null, $properties['dealstage']);\n }\n }\n\n $recordType = null;\n if ($businessProcess) {\n $recordType = $businessProcess->recordTypes()->first();\n }\n\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $record = [\n 'crmId' => $object['id'],\n 'name' => $properties['dealname'] ?? 'Unknown Deal',\n 'value' => $amount,\n 'won' => $isWon,\n 'closed' => $isWon || $isLost,\n 'stage' => [\n 'id' => $stage?->getUuid() ?? '',\n 'name' => $stage?->getName() ?? '',\n ],\n ];\n\n if ($recordType) {\n $record += [\n 'recordType' => [\n 'id' => $recordType->id_string,\n 'name' => $recordType->name,\n ],\n ];\n }\n\n if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n }\n\n /**\n * @inheritdoc\n */\n public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array\n {\n $data = [];\n switch ($objectType) {\n case 'contact':\n $hsObject = 'contact';\n\n break;\n case 'account':\n $hsObject = 'company';\n\n break;\n default:\n // This is a hack to prioritise and override a contact/company with a deal.\n if ($opportunityId) {\n $hsObject = 'deal';\n $objectId = $opportunityId;\n } else {\n throw new InvalidArgumentException('Object type not supported.');\n }\n }\n\n $engagementTypes = ['meetings', 'tasks'];\n\n foreach ($engagementTypes as $engagementType) {\n $payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);\n\n $this->logger->info('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n $engagements = $this->client->getPaginatedData($payload, $engagementType);\n\n foreach ($engagements['results'] as $engagement) {\n if ($engagementType == 'meetings') {\n $title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';\n } elseif ($engagementType == 'tasks') {\n $title = $engagement['properties']['hs_task_subject'];\n } else {\n $title = 'Scheduled meeting';\n }\n\n $data[] = [\n 'crmId' => $engagement['id'],\n 'subject' => $title,\n 'due' => $engagement['properties']['hs_timestamp'],\n 'type' => $engagement['properties']['hs_activity_type'] ?? null,\n ];\n }\n }\n\n usort($data, function ($item1, $item2) {\n return $item2['due'] <=> $item1['due'];\n });\n\n return $data;\n }\n\n /**\n * Try to find CRM Objects using email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchExactlyByEmail(string $email, ?int $userId = null): ?array\n {\n $contactProperties = [\n 'email',\n// 'firstname',\n// 'lastname',\n// 'country',\n// 'phone',\n// 'mobilephone',\n// 'jobtitle',\n// 'hubspot_owner_id',\n// 'associatedcompanyid',\n// 'photo',\n ];\n $contact = null;\n $account = null;\n\n try {\n $hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);\n return null;\n\n if ($hsContact) {\n $contact = $this->importContact($hsContact);\n $account = $contact->account;\n }\n\n $data = $this->convertCrmData($contact, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n } catch (BadRequest $e) {\n $this->logger->warning('[HubSpot] Search failed', [\n 'team_id' => $this->team->getId(),\n 'search_identifier' => $email,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return null;\n }\n\n public function getDomain(string $email): ?string\n {\n return $this->getDomainFromEmail($email);\n }\n\n /**\n * Try to find CRM objects using domain name of the email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByDomain(string $domain, ?int $userId = null): ?array\n {\n $companyName = $domain;\n\n // Try to find a company matching their email domain.\n $companyProperties = [\n 'country',\n 'phone',\n 'name',\n 'hs_avatar_filemanager_key',\n 'industry',\n 'hubspot_owner_id',\n 'domain',\n ];\n\n try {\n $hsAccounts = $this->client\n ->getInstance()\n ->companies()\n ->searchByDomain($companyName, $companyProperties);\n } catch (Throwable $e) {\n $this->logger->info('[HubSpot] Search failed', [\n 'error' => $e->getMessage(),\n 'domain' => $domain,\n ]);\n\n return null;\n }\n\n $account = null;\n // If there are multiple accounts, don't guess, we'll ask later.\n if (\\count($hsAccounts->data->results) === 1) {\n // Persist this remote object.\n $account = $this->syncAccount($hsAccounts->data->results[0]->companyId);\n }\n\n $data = $this->convertCrmData(null, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n }\n\n /**\n * @return array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array\n {\n $countryCode = null;\n if ($contact && $contact->country_code) {\n $countryCode = $contact->country_code;\n } elseif ($account && $account->country_code) {\n $countryCode = $account->country_code;\n }\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact ? $contact->crm_provider_id : null,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n // If there are multiple opportunities, don't guess, we'll ask later.\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n protected function getCacheKey(string $object, ?int $userId = null): ?string\n {\n $key = $this->team->getId() . $object;\n $keySuffix = $this->getOwnerKeySuffix($userId);\n\n return $key . $keySuffix;\n }\n\n private function getOwnerKeySuffix(?int $userId = null): string\n {\n return $userId === null ? '' : (string) $userId;\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n *}\n */\n public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array\n {\n if (str_contains($phone, '**')) {\n return null;\n }\n\n // trim all whitespaces if present so the lookup doesn't fail\n $phone = str_replace(' ', '', $phone);\n\n // Check if the user is internal.\n if ($this->isPhoneNumberOfTeamMember($phone)) {\n return null;\n }\n\n $response = $this->searchForPhoneNumber($phone);\n if (empty($response)) {\n return null;\n }\n\n // This would ideally importContact instead but the response type differs.\n $contact = $this->findAndSyncContact($response['results'][0]['id']);\n if (! $contact instanceof Contact) {\n return null;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account?->crm_provider_id,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n\n try {\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n } catch (Exception $e) {\n $this->logger->debug('[HubSpot] Opportunity failed to sync.', [\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n private function isPhoneNumberOfTeamMember(string $phone): bool\n {\n $teamRepository = app(TeamRepository::class);\n $user = $teamRepository->findTeamMemberByPhone($this->team, $phone);\n\n if ($user instanceof User) {\n return true;\n }\n\n return false;\n }\n\n private function findAndSyncContact(string $crmId): ?Contact\n {\n try {\n return $this->syncContact($crmId);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'reason' => $exception->getMessage(),\n ]);\n\n return null;\n }\n }\n\n private function hasResults(array $response): bool\n {\n return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;\n }\n\n private function searchForPhoneNumber(string $phone): array\n {\n // Normalizes the provided phone number for the API search.\n $normalizedPhone = $this->normalizePhoneNumber($phone);\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);\n\n $this->logger->info('[HubSpot] Phone match search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);\n\n if (! $this->hasResults($response)) {\n $nationalPhone = preg_replace('/\\D/', '', phone_national(null, $phone));\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);\n\n $this->logger->info('[HubSpot] Phone match national number search triggered', [\n 'phone' => $phone,\n 'nationalPhone' => $nationalPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n if (! $this->hasResults($response)) {\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);\n\n $this->logger->info('[HubSpot] Phone match alternative search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n return $this->hasResults($response) ? $response : [];\n }\n\n private function handlePhoneSearchRequest(string $phone, array $payload): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/contacts/search';\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n $endpoint,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'phone' => $phone,\n 'reason' => $exception->getMessage(),\n ]);\n\n return [];\n }\n\n $this->logger->info('[HubSpot] Phone match completed', [\n 'phone' => $phone,\n 'response' => $response,\n ]);\n\n return $response->toArray();\n }\n\n private function normalizePhoneNumber(string $phone): string\n {\n return ltrim(phone_e164(null, $phone), '+0');\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByName(string $name, ?int $userId = null): ?array\n {\n // Don't waste time searching for single character strings.\n if (\\strlen($name) <= 1) {\n return null;\n }\n\n $cacheKey = $this->getCacheKey($name, $userId);\n\n $result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {\n $payload = $this->payloadBuilder->generateSearchContactsByNamePayload(\n $name,\n $this->getContactFields()\n );\n\n $hsContacts = $this->client->getPaginatedData($payload, 'contact');\n if (empty($hsContacts['results'])) {\n return false;\n }\n\n $contact = $this->importContact($hsContacts['results'][0]);\n if ($contact === null) {\n return false;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n });\n\n return is_array($result) ? $result : null;\n }\n\n\n private function convertActivityAssociations(Activity $activity): array\n {\n return [\n 'contactIds' => $this->getParticipantsIds($activity),\n 'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],\n 'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],\n 'ownerIds' => [],\n ];\n }\n\n private function getParticipantsIds(Activity $activity): array\n {\n $attendees = [];\n\n $participantRepository = app(ParticipantRepository::class);\n $participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);\n foreach ($participants as $participant) {\n if ($participant->user_id || $participant->isCoach()) {\n continue;\n }\n\n $contact = $participant->contact()->first();\n if ($contact && $contact->crm_provider_id) {\n $attendees[] = $contact->crm_provider_id;\n } else {\n if (! empty($participant->name)) {\n $attendeeData = $this->fetchMissingAttendeeInfo($participant);\n }\n if (! empty($attendeeData['id'])) {\n $attendees[] = $attendeeData['id'];\n }\n }\n }\n\n if ($activity->hasContact()) {\n $attendees[] = $activity->contact->crm_provider_id;\n }\n\n return array_unique($attendees);\n }\n\n private function fetchMissingAttendeeInfo(Participant $participant): array\n {\n // Check if we need to look inside an account context.\n $activity = $participant->getActivity();\n $companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;\n\n // First check the local data.\n /** @var Contact[] $contacts */\n $contacts = $this->team->contacts()\n ->with('account')\n ->where('name', $participant->name)\n ->whereNotNull('email')\n ->get();\n\n foreach ($contacts as $contact) {\n // If we have a company in scope, check the contact is associated to it.\n if (\n $companyId !== null\n && ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)\n ) {\n continue;\n }\n\n return [\n 'id' => $contact->crm_provider_id,\n 'email' => $contact->email,\n ];\n }\n\n $payload = $this->generateNameSearchPayload($participant->name, 0, 20);\n\n try {\n $response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);\n\n // TODO add some logic to choose the most suitable contact if multiple\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n if (empty($object['properties']) === false) {\n // Check the company matches the contact.\n // Todo: Move this check inside the API search.\n if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {\n continue;\n }\n\n return [\n 'id' => $object['id'],\n 'email' => $properties['email'],\n ];\n }\n }\n } catch (Exception $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->id_string,\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [];\n }\n\n /**\n * Store transcripts as note engagement.\n *\n * @throws Exception\n */\n public function createTranscriptNotes(Activity $activity): void\n {\n // For HS no need to check if Crm profile - Log Notes field is enabled\n // We only check if store_transcript toggle is enabled on crm profile.\n $engagement = [\n 'active' => true,\n 'ownerId' => $this->profile->crm_provider_id,\n 'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,\n 'type' => 'NOTE',\n ];\n\n // Generate activity transcription.\n $transcriptionData = $this->generateTranscription($activity);\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);\n\n $metadata = [\n 'body' => $transcripts,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsEngagement = $this->client\n ->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $noteId = $hsEngagement->data->engagement->id;\n\n // Store crm logged id in transcription.\n $transcription = $activity->getTranscription();\n $transcription->crm_activity_id = $noteId;\n $transcription->save();\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $payload = [\n 'properties' => $data,\n ];\n\n try {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n $this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);\n\n break;\n case FieldData::OBJECT_CONTACT:\n $this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_ACCOUNT:\n $this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_TASK:\n // Endpoint for Engagements not ready\n $engagements = [\n 'type' => 'TASK',\n ];\n $metadata = $data;\n $this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $objectId],\n $metadata,\n );\n\n break;\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $apiException) {\n $errorMessage = $apiException->getMessage();\n if ($apiException->getResponseBody()) {\n $responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);\n $errorMessage = $responseBody['message'] ?? $apiException->getMessage();\n }\n\n $this->logger->error(\n '[HubSpot] Update record failed',\n [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'payload' => $payload,\n 'reason' => $errorMessage,\n 'team' => $this->team->getUuid(),\n ]\n );\n\n throw new CrmException($errorMessage);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n return $this->client->getInstance()->deals()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_CONTACT:\n return $this->client->getInstance()->contacts()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_ACCOUNT:\n return $this->client->getInstance()->companies()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_TASK:\n return $this->client->getInstance()->engagements()->get($objectId)->toArray();\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n }\n\n /**\n * @throws BadRequest\n * @throws CrmException\n */\n public function updateStage($crmObject, Stage $stage): void\n {\n $payload = [\n 'properties' => [\n [\n 'name' => 'dealstage',\n 'value' => $stage->crm_provider_id,\n ],\n ],\n ];\n\n try {\n $this->client->getInstance()->deals()->update($crmObject->crm_provider_id, $payload);\n } catch (BadRequest $badRequest) {\n if ($badRequest->getCode() === 403) {\n throw new CrmException(\n \"Sorry, you don't have permission to update this stage.\",\n $badRequest->getCode(),\n $badRequest,\n );\n }\n\n $this->logger->warning('[HubSpot] Stage update failed', [\n 'dealId' => $crmObject->crm_provider_id,\n 'payload' => $payload,\n 'message' => $badRequest->getMessage(),\n ]);\n\n throw $badRequest;\n }\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n $url = null;\n $baseUrl = 'https://app.hubspot.com/contacts/' . $this->config->crm_provider_id . '/';\n\n switch ($objectType) {\n case 'account':\n $url = $baseUrl . 'company/' . $providerId;\n\n break;\n\n case 'contact':\n $url = $baseUrl . 'contact/' . $providerId;\n\n break;\n\n case 'opportunity':\n $url = $baseUrl . 'deal/' . $providerId;\n\n break;\n\n case 'task':\n case 'activity':\n return null;\n\n // This should not be deep-linked as per JMNY-3934.\n //$url = $baseUrl.'tasks/list/view/all/?taskId='.$providerId;\n break;\n }\n\n return $url;\n }\n\n public function searchCalls(Carbon $from, Carbon $to, string $activityProvider): array\n {\n $this->logger->info('[HubSpot] Search calls', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $calls = [];\n $page = 1;\n\n do {\n try {\n $payload = $this->payloadBuilder->generateGetCallsPayload($from, $to, $activityProvider, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n $calls = array_merge($calls, $responseResults);\n $page++;\n } while (! empty($responseResults));\n\n return $calls;\n }\n\n public function searchCallsForPeriodByPage(Carbon $from, Carbon $to, int $page, bool $retry = true)\n {\n try {\n $payload = $this->payloadBuilder->generateSearchCallsByPeriodPayload($from, $to, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls for period failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallsForPeriodByPage($from, $to, $page, false);\n }\n $response = null;\n }\n\n return $response;\n }\n\n public function searchCallsForPeriod(Carbon $from, Carbon $to): Generator\n {\n $this->logger->info('[HubSpot] Search calls for period', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $page = 1;\n\n do {\n $response = $this->searchCallsForPeriodByPage($from, $to, $page);\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n\n $associationContacts = $this->getAssociationDataForCollection($responseResults, 'calls', 'contacts');\n $associationCompanies = $this->getAssociationDataForCollection($responseResults, 'calls', 'companies');\n $associationDeals = $this->getAssociationDataForCollection($responseResults, 'calls', 'deals');\n\n foreach ($responseResults as $call) {\n $call['associations'] = [\n 'contacts' => $this->importAssociationData($call, $associationContacts),\n 'companies' => $this->importAssociationData($call, $associationCompanies),\n 'deals' => $this->importAssociationData($call, $associationDeals),\n ];\n\n yield $call;\n }\n $page++;\n } while (! empty($responseResults));\n }\n\n public function getCall(string $callId): array\n {\n $this->logger->info('[HubSpot] Get call', [\n 'call_id' => $callId,\n ]);\n\n $searchAttributes = $this->payloadBuilder->getSearchCallAttributes();\n $endpoint = sprintf(\n 'https://api.hubapi.com/crm/v3/objects/calls/%s',\n $callId,\n );\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'GET',\n $endpoint,\n [],\n sprintf(\n 'properties=%s&associations=contacts,companies,deals',\n implode(',', $searchAttributes),\n ),\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Get call failed', [\n 'call_id' => $callId,\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n return empty($response) ? [] : $response->toArray();\n }\n\n public function bulkAddPlaybackURLToDescription(array $crmUpdateData): array\n {\n $crmUpdateBatches = array_chunk($crmUpdateData, self::BATCH_UPDATE_LIMIT);\n\n $updatedCrmIds = [];\n\n foreach ($crmUpdateBatches as $crmBatch) {\n $payload = $this->payloadBuilder->generatePlaybackAddUrlBatchPayload($crmBatch);\n $updateSuccess = $this->bulkAddPlaybackURLToDescriptionRequest($payload);\n if ($updateSuccess) {\n $updatedCrmIds = array_merge($updatedCrmIds, array_column($crmBatch, 'crm_id'));\n }\n }\n\n return $updatedCrmIds;\n }\n\n private function bulkAddPlaybackURLToDescriptionRequest(array $payload, bool $retry = true): bool\n {\n try {\n $this->client->getNewInstance()->crm()->objects()->batchApi()->update('calls', $payload);\n\n return true;\n } catch (\\HubSpot\\Client\\Crm\\Objects\\ApiException $e) {\n $response = json_decode($e->getResponseBody(), true);\n $retryAfter =\n isset($response['policyName'])\n && $response['policyName'] == self::TEN_SECONDLY_ROLLING_POLICY\n ? self::TEN_SECONDLY_ROLLING_LIMIT\n : 1;\n } catch (Exception $e) {\n $retryAfter = 1;\n }\n\n $this->logger->warning('[HubSpot] Bulk add playback url to CRM failed', [\n 'reason' => $e->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep($retryAfter);\n\n return $this->bulkAddPlaybackURLToDescriptionRequest($payload, false);\n }\n\n return false;\n }\n\n /**\n * Sometimes we have secondly rate limit error, then retry request after 1 second\n */\n public function searchCallByRecordingURLToken(string $playbackURLToken, bool $retry = true): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n $payload = $this->payloadBuilder->generateSearchCallByTokenPayload($playbackURLToken);\n\n $this->logger->info('[HubSpot] CRM Search by playback URL token requested', [\n 'request' => $payload,\n ]);\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, ['json' => ($payload)]);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search by playback URL token failed', [\n 'playbackURLToken' => $playbackURLToken,\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallByRecordingURLToken($playbackURLToken, false);\n }\n\n return [];\n }\n\n return empty($response['results']) ? [] : $response['results'][0];\n }\n\n /**\n * Generate transcription for the activity.\n */\n private function generateTranscription(Activity $activity): string\n {\n if (! $this->config->store_transcript) {\n // If sending transcription to activity toggle is disabled\n return '';\n }\n\n $transcriptionSegments = $this->transcriptionService->findTranscriptionByActivity($activity);\n\n if ($transcriptionSegments->isEmpty()) {\n return '';\n }\n\n $transcription = sprintf(\n '<p><strong>Transcript for %s</strong></p><p></p>',\n $activity->title ?? $activity->activity_title,\n );\n\n $roomOwnerParticipant = $activity->findParticipantRoomOwner();\n $roomOwnerParticipantId = $roomOwnerParticipant !== null\n ? $roomOwnerParticipant->getId()\n : null;\n\n\n $transcription .= $transcriptionSegments\n ->map(static function (array $transcriptionSegment) use ($roomOwnerParticipantId): string {\n $isOrganiser = $roomOwnerParticipantId === $transcriptionSegment['participantId']\n && $roomOwnerParticipantId !== null;\n $transcriptColor = $isOrganiser ? '#000000' : '#f0415a';\n\n return sprintf(\n '<span style=\"color: %s;\">%s | </span>%s',\n $transcriptColor,\n $transcriptionSegment['formattedStartsAt'],\n $transcriptionSegment['transcript'],\n );\n })\n ->implode('<br />');\n\n return $transcription;\n }\n\n /**\n * @param array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }> $options\n *\n * @return FieldData[]\n */\n private function importOptions(Field $field, array $options): array\n {\n $fieldValues = [];\n $values = [];\n $sequence = 0;\n\n foreach ($options as $option) {\n $values[] = [\n 'value' => $option['value'] ?? $option['id'],\n 'label' => substr($option['label'], 0, 255),\n 'sequence' => $sequence++,\n ];\n }\n\n $fieldsToPurge = $field->values()->get()->pluck('value')->toArray();\n\n foreach ($values as $value) {\n $value['value'] = substr($value['value'], 0, 255);\n $fieldValues[] = $field->values()->updateOrCreate([\n 'value' => $value['value'],\n ], $value);\n\n // Remove this value from the ones we are going to purge.\n if (($key = array_search($value['value'], $fieldsToPurge, false)) !== false) {\n unset($fieldsToPurge[$key]);\n }\n }\n\n // Delete the old values that are no longer used.\n $field->values()->whereIn('value', $fieldsToPurge)->delete();\n\n return $fieldValues;\n }\n\n public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null || $objectId === null) {\n return null;\n }\n\n /** @var User $user */\n $user = $activity->getUser();\n\n $profile = $this->assignCrmOwner($user, $activity);\n if (! $profile instanceof Profile) {\n return null;\n }\n\n $timestamp = Carbon::now($user->getTimezone())->getTimestamp() * 1000;\n $engagement = [\n 'active' => true,\n 'ownerId' => $profile->getAttribute('crm_provider_id'),\n 'timestamp' => $timestamp,\n 'type' => 'NOTE',\n ];\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $body = mb_strimwidth($body, 0, self::ENGAGEMENT_BODY_MAX_LENGTH);\n $metadata = [\n 'body' => $body,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsActivityId = $this->client->createNote(\n body: $body,\n ownerId: $profile->getCrmProviderId(),\n timestamp: $timestamp,\n objectId: $objectId,\n noteObject: $noteObject,\n );\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $this->logger->info('[HubSpot] Saving Transcription Summary as Note', [\n 'activity' => $activity->getUuid(),\n 'crmActivity' => $hsActivityId,\n ]);\n\n return $hsActivityId;\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function attachSummaryToActivity(ActivityContract $activity, string $summaryTitle, string $summaryContents): bool\n {\n $this->logger->info('[HubSpot] Attaching summary to activity', [\n 'activity' => $activity->getUuid(),\n 'summary_content' => $summaryContents,\n ]);\n\n if (! $activity instanceof Activity) {\n throw new InvalidArgumentException('Expected instance of Activity');\n }\n\n $summary = '<p><strong>' . $summaryTitle . '</strong></p>';\n $summary .= '<p>' . $summaryContents . '</p>';\n $metadata = $this->buildMetadataForSummaryUpdate($activity, $summary);\n\n try {\n $type = $this->matchActivityEngagementType($activity);\n $engagement = ['type' => $type];\n\n $this->client->updateEngagement($activity->getCrmProviderId(), $engagement, $metadata);\n } catch (Exception $e) {\n $this->logger->warning('[HubSpot] Update summary failed', [\n 'activity' => $activity->getUuid(),\n 'reason' => $e->getMessage(),\n ]);\n\n return false;\n }\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $activity->getCrmProviderId()],\n $metadata,\n );\n\n return true;\n }\n\n private function buildMetadataForSummaryUpdate(Activity $activity, string $summary): array\n {\n $descriptionField = $activity->getType() === Activity::TYPE_CONFERENCE ? 'internalMeetingNotes' : 'body';\n $engagement = $this->client->getEngagementData($activity->getCrmProviderId());\n // Meeting without internalMeetingNotes might mean it just does not have any notes;\n $description = $engagement['metadata'][$descriptionField] ?? null;\n\n if (empty($description)) {\n $data = $summary;\n } else {\n // avoid playbook url link to Jiminny being sent twice in the activity description\n $targetUrl = PlaybackUrlBuilder::build($activity);\n\n if (str_contains($description, $targetUrl)) {\n $jiminnyUrl = '<p><a href=\"' . $targetUrl . '\" title=\"Play at Jiminny\">Play at Jiminny</a></p>';\n $summary = str_replace($jiminnyUrl, '', $summary);\n\n $this->logger->info('[HubSpot] Summary modified', [\n 'activity' => $activity->getUuid(),\n 'target_url' => $jiminnyUrl,\n 'modified_summary_content' => $summary,\n ]);\n }\n\n $data = $description . '<p></p>' . $summary;\n }\n\n return [\n $descriptionField => $data,\n ];\n }\n\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n return $this->syncRelatedActivityManager->fetchAndAssociateRelatedActivity($activity);\n }\n\n public function fetchRelatedActivity(Activity $activity): array\n {\n return [];\n }\n\n public function getDealsInBulk(array $dealIds): array\n {\n $payload = $this->payloadBuilder->getDealsInBulkPayload($dealIds);\n\n return $this->client->getPaginatedData($payload, 'deals');\n }\n\n /**\n * Extract deal IDs from HubSpot search response.\n *\n * @param array $hubspotResponse The raw HubSpot search API response.\n * @param bool $includeArchived Whether to include archived deals (default: false).\n *\n * @return string[] Array of deal IDs as strings.\n */\n public function extractDealIds(array $hubspotResponse, bool $includeArchived = false): array\n {\n if (empty($hubspotResponse['results'])) {\n return [];\n }\n\n return array_values(\n array_map(\n fn ($deal) => $deal['id'],\n array_filter(\n $hubspotResponse['results'],\n fn ($deal) => $includeArchived || empty($deal['archived'])\n )\n )\n );\n }\n\n public function matchActivityEngagementType(Activity $activity): string\n {\n return match ($activity->getType()) {\n Activity::TYPE_CONFERENCE => self::TYPE_MEETING,\n Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND => self::TYPE_CALL,\n default => self::TYPE_NOTE,\n };\n }\n\n private function assignCrmOwner(User $user, ActivityContract $activity): ?Profile\n {\n $profile = $user->getProfile();\n if ($profile instanceof Profile) {\n return $profile;\n }\n\n $this->logger->info('[HubSpot] Unable to save summary. No profile', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n private static function getDealsPipelinesEndpoint(): string\n {\n return self::API_URL . self::ENDPOINT_PIPELINES . self::PIPELINE_OBJECT_TYPE_DEALS;\n }\n\n public function verifyTaskExists(Activity $activity): bool\n {\n $crmProviderId = $activity->getCrmProviderId();\n $cacheKey = \"crm_task_exists:{$this->config->getId()}:$crmProviderId\";\n\n return Cache::remember($cacheKey, self::TASK_VERIFICATION_CACHE_TTL, function () use ($crmProviderId) {\n try {\n $engagement = $this->client->getEngagementData($crmProviderId);\n\n return ! empty($engagement);\n } catch (HttpNotFoundException|BadRequest) {\n // Engagement not found in CRM - this is expected and permanent\n $this->logger->info('[Hubspot] Engagement not found during verification', [\n 'engagement_id' => $crmProviderId,\n 'config_id' => $this->config->getId(),\n ]);\n\n return false;\n }\n // Let other exceptions (network errors, rate limits, etc.) bubble up for retry\n });\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse Carbon\\Carbon;\nuse Exception;\nuse Generator;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Illuminate\\Support\\Facades\\Cache;\nuse InvalidArgumentException;\nuse Jiminny\\Contracts\\Repositories\\TeamRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\HubspotInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SavePlaybackLinkToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\VerifyTaskExistsInterface;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\HttpNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Participant;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Repositories\\Crm\\FieldRepository;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\ParticipantRepository;\nuse Jiminny\\Services\\Avatar\\ProspectPhotoPathService;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\Hubspot\\Actions\\SyncArchivedProfilesAction;\nuse Jiminny\\Services\\Crm\\Hubspot\\Fields\\ValueNormalizer;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\OpportunitySyncTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncFieldsTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\WriteCrmTrait;\nuse Jiminny\\Services\\Crm\\MatchDomainByEmailInterface;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Services\\Crm\\ResolveCompanyNameByEmailTrait;\nuse Jiminny\\Utils\\PlaybackUrlBuilder;\nuse Sentry;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse Throwable;\nuse UnexpectedValueException;\n\n/**\n * @phpstan-type CrmFieldDefinition array{\n * name: string,\n * label: string,\n * description: string,\n * type: string,\n * fieldType: string,\n * hidden: bool,\n * showCurrencySymbol: bool,\n * options: array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }\n */\nclass Service extends BaseService implements\n HubspotInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n SendSummaryToCrmInterface,\n MatchDomainByEmailInterface,\n SavePlaybackLinkToCrmInterface,\n RemoteEntityManipulationInterface,\n FetchRelatedActivityInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n VerifyTaskExistsInterface\n{\n use ResolveCompanyNameByEmailTrait;\n use SyncCrmEntitiesTrait;\n use WriteCrmTrait;\n use SyncFieldsTrait;\n use OpportunitySyncTrait;\n\n private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;\n\n private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';\n private const int BATCH_UPDATE_LIMIT = 100;\n private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';\n private const int TEN_SECONDLY_ROLLING_LIMIT = 10;\n private const string CALLS_SEARCH_ENDPOINT = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n\n private const string TYPE_NOTE = 'NOTE';\n\n private const string TYPE_MEETING = 'MEETING';\n\n private const string TYPE_CALL = 'CALL';\n\n private const string API_URL = 'https://api.hubapi.com';\n\n // NB: v1 is legacy - v3 is the newest\n private const string ENDPOINT_PIPELINES = '/crm-pipelines/v1/pipelines/';\n private const string PIPELINE_OBJECT_TYPE_DEALS = 'deals';\n\n private const int TASK_VERIFICATION_CACHE_TTL = 86400; // 1 day\n\n /**\n * @var ClientInterface|Client\n */\n protected $client;\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected ProspectPhotoPathService $prospectPhotoPathService;\n\n private SyncFieldAction $syncFieldAction;\n private PayloadBuilder $payloadBuilder;\n private SyncRelatedActivityManager $syncRelatedActivityManager;\n private SyncArchivedProfilesAction $syncArchivedProfilesAction;\n private WebhookSyncBatchProcessor $batchProcessor;\n\n public function __construct(\n Client $client,\n SyncFieldAction $syncFieldAction,\n PayloadBuilder $payloadBuilder,\n ProspectPhotoPathService $prospectPhotoPathService,\n SyncArchivedProfilesAction $syncArchivedProfilesAction,\n WebhookSyncBatchProcessor $batchProcessor,\n ) {\n parent::__construct();\n\n $this->client = $client;\n $this->syncFieldAction = $syncFieldAction;\n $this->prospectPhotoPathService = $prospectPhotoPathService;\n $this->payloadBuilder = $payloadBuilder;\n $this->syncArchivedProfilesAction = $syncArchivedProfilesAction;\n $this->batchProcessor = $batchProcessor;\n $this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [\n 'client' => $this->client,\n ]);\n $this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [\n 'client' => $this->client,\n 'payloadBuilder' => $this->payloadBuilder,\n 'logger' => $this->logger,\n ]);\n $this->crmEntityRepository = app(CrmEntityRepository::class);\n $this->dealFieldsService = app(DealFieldsService::class);\n }\n\n public function getDisplayName(): string\n {\n return 'HubSpot';\n }\n\n protected function getOAuthAccount(User $user): ?SocialAccount\n {\n // In this case, the Account Owner is always the connection for any API operations.\n $owner = $user->team->owner;\n\n return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);\n }\n\n public function getClient(): Client\n {\n /** @var Client */\n return $this->client;\n }\n\n /**\n * Convert raw field data into a format compatible with CRM APIs.\n *\n * @param bool $internal Direction of the conversion.\n * True is pulling from CRM, false normalize before sending to CRM.\n */\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return ValueNormalizer::normalize(\n fieldType: $fieldType,\n fieldValue: $fieldValue,\n isInbound: $internal,\n );\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultFields(string $activityType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n $defaultFields = FieldDefinitions::defaultTaskFields();\n\n // This lazy creates these fields if not already setup.\n foreach ($defaultFields as $defaultField) {\n $fields[] = $this->config->fields()->firstOrCreate($defaultField);\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityField(string $activityType): Field\n {\n /** @var Field $activityField */\n $activityField = $this->config->fields()->where([\n 'crm_provider_id' => 'activityType',\n 'object_type' => $activityType,\n ])->first();\n\n return $activityField;\n }\n\n /**\n * @inheritdoc\n */\n public function getSupportedPlaybookTypes(): array\n {\n return [Playbook::ACTIVITY_TYPE_TASK];\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n // Outcome should always be provided calls/meetings.\n $fieldData = [\n [\n 'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',\n 'object_type' => Field::OBJECT_TASK,\n ],\n ];\n\n foreach ($fieldData as $data) {\n $field = $this->config->fields()->where($data)->first();\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n }\n\n return $fields;\n }\n\n public function getDealInsightsFields(): array\n {\n return FieldDefinitions::dealInsightsFields();\n }\n\n protected function getDefaultFollowupLayoutFields(string $activityType): array\n {\n $fields = [];\n $fieldRepo = app(FieldRepository::class);\n $fieldData = FieldDefinitions::followupFieldsFilter();\n\n foreach ($fieldData as $data) {\n $field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function syncField(Field $field): void\n {\n switch ($field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_CONTACT:\n $crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_OPPORTUNITY:\n $crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_TASK:\n $this->syncSingleTaskField($field);\n\n return;\n default:\n return;\n }\n\n $this->syncFieldAction->execute($field, $crmField->toArray());\n }\n\n /**\n * @param array<array{\n * id:string,\n * label:string,\n * value?:string\n * }> $options\n *\n * @throws CrmException\n *\n * @return FieldData[]\n *\n */\n public function importPicklistValues(\n Field $field,\n array $options = [['id' => '', 'label' => '', 'value' => '']],\n ): array {\n if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {\n // We already have the options, no need to fetch them again\n return $this->importOptions($field, $options);\n }\n\n $options = [];\n\n switch ($field->getObjectType()) {\n case Field::OBJECT_ACCOUNT:\n $options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_CONTACT:\n $options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n // Hubspot has different endpoint for stages\n $options = $this->getClient()->fetchOpportunityFieldOptions($field);\n\n break;\n\n case Field::OBJECT_TASK:\n if ($field->getCrmProviderId() === 'disposition') {\n $options = $this->getClient()->fetchDispositionFieldOptions();\n } elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {\n $options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);\n }\n\n break;\n\n default:\n $this->logger->warning('Invalid object type', [\n 'object_type' => $field->getObjectType(),\n 'field_id' => $field->getId(),\n ]);\n\n throw new CrmException('Invalid object type');\n }\n\n return $this->importOptions($field, $options);\n }\n\n /**\n * @inheritdoc\n */\n public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage\n {\n $missingStage = null;\n\n try {\n // Use the HubSpot API client instead of the SDK crmPipelines() method\n $endpoint = self::getDealsPipelinesEndpoint();\n $pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);\n $pipelines = $pipelinesResponse->data->results;\n } catch (RequestException|BadRequest $exception) {\n throw $exception;\n }\n\n foreach ($pipelines as $pipeline) {\n $stages = [];\n\n // We create a business process to contain the pipeline, and store all stages against it.\n $p = ResponseNormalize::normalizePipeline($pipeline);\n\n // Create/update business process for this pipeline\n $businessProcess = $this->config->businessProcesses()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'type' => BusinessProcess::TYPE_OPPORTUNITY,\n 'is_selectable' => $p['active'],\n ]);\n\n // A record type is really a clone of the business process, used to store which record uses which pipeline.\n // Create/update record type clone\n $this->config->recordTypes()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'is_selectable' => $p['active'],\n 'business_process_id' => $businessProcess->id ?? null,\n ]);\n\n // Stages - fetch all existing stages upfront to avoid N+1 queries\n $existingStages = $this->config->stages()\n ->withTrashed()\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->get()\n ->keyBy('crm_provider_id');\n\n foreach ($p['stages'] as $dealStage) {\n $s = ResponseNormalize::normalizeDealStage($dealStage);\n\n /** @var ?Stage $existingStage */\n $existingStage = $existingStages->get($s['id']);\n\n // Restore soft-deleted stages that are now active in HubSpot\n if ($existingStage?->trashed() && $s['active']) {\n $existingStage->restore();\n }\n\n // Upsert stage (updates soft-deleted records without restoring them)\n $stage = $this->config->stages()->withTrashed()->updateOrCreate([\n 'crm_provider_id' => $s['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($s['label'], 0, 50),\n 'label' => mb_strimwidth($s['label'], 0, 191),\n 'type' => Stage::TYPE_OPPORTUNITY,\n 'sequence' => $s['displayOrder'],\n 'is_selectable' => $s['active'],\n 'probability' => $s['probability'] * 100,\n ]);\n\n if ($missingStageName === $s['id']) {\n $missingStage = $stage;\n }\n\n $stages[] = $stage->id;\n }\n\n $businessProcess->stages()->sync($stages);\n }\n\n return $missingStage;\n }\n\n /**\n * @inheritdoc\n */\n public function syncOrganization(): void\n {\n try {\n $endpoint = 'https://api.hubapi.com/integrations/v1/me';\n $response = $this->client->getInstance()->getClient()->request('get', $endpoint);\n\n $accountData = $response->data;\n $this->config->update(['default_currency' => $accountData->currency]);\n } catch (BadRequest $e) {\n throw new CrmException('Could not sync the organization.', $e->getCode(), $e);\n }\n }\n\n /**\n * @inheritdoc\n *\n * @throws CrmException\n */\n public function syncProfiles(?User $userToSearch = null): ?Profile\n {\n $this->syncArchivedProfilesAction->execute($this->team, $this->client, $this->config);\n\n try {\n $owners = $this->client->getOwners();\n } catch (\\HubSpot\\Client\\Crm\\Owners\\ApiException $e) {\n $this->logger->error('[HubSpot] Could not sync the profiles.', [\n 'team_id' => $this->team->getId(),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new CrmException('Could not sync the profiles.', $e->getCode(), $e);\n }\n\n $profileRepository = app(ProfileRepository::class);\n $teamRepository = app(TeamRepository::class);\n\n foreach ($owners as $owner) {\n if ($owner->getArchived()) {\n // not supposed to fetch archived, but log anyway\n $this->logger->warning('[HubSpot] Found archived owner', [\n 'crm_provider_id' => $owner->getId(),\n 'email' => $owner->getEmail(),\n ]);\n\n continue;\n }\n\n $email = $owner->getEmail();\n if ($email === null) {\n continue;\n }\n\n $user = $teamRepository->findActiveTeamMemberByEmail($this->team, $email);\n\n if (! $user instanceof User) {\n continue;\n }\n\n $profile = $profileRepository->updateOrCreateProfile($user, [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $owner->getId(),\n ]);\n\n if ($userToSearch && $userToSearch->getId() === $user->getId()) {\n return $profile;\n }\n }\n\n return null;\n }\n\n private function generateNameSearchPayload(string $name, int $offset, int $limit): array\n {\n $payload = [\n 'query' => $name,\n 'sorts' => [\n [\n 'propertyName' => 'modifieddate',\n 'direction' => 'DESCENDING',\n ],\n ],\n 'properties' => [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n 'industry',\n 'name',\n 'company',\n ],\n 'limit' => $limit,\n 'after' => $offset,\n ];\n\n $this->logger->debug('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n return $payload;\n }\n\n /**\n * @inheritdoc\n */\n public function find(string $name, array $scopes): array\n {\n $count = $this->limit ?? 20;\n $offset = $this->offset ?? 0;\n\n /** @var array<int, array<string, mixed>> */\n return Cache::remember(\n key: $this->team->getId() . $name . $count . $offset,\n ttl: 300,\n callback: function () use ($name, $offset, $count): array {\n $data = [];\n\n // Use the new V3 API to find contacts based on additional fields.\n foreach (['companies', 'contacts'] as $objectType) {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/' . $objectType . '/search';\n $payload = $this->generateNameSearchPayload($name, $offset, $count);\n $type = $objectType === 'companies' ? 'account' : 'contact';\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, [\n 'json' => $payload,\n ]);\n\n // Build mapped list.\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n\n $objectName = $this->buildContactName($properties);\n\n $record = [\n 'crmId' => $object['id'],\n // Pass crmUrl to the FE, needed for success message in the extension when you log activity.\n 'crmUrl' => $this->generateProviderUrl($object['id'], $type),\n 'name' => $objectName,\n 'prospectType' => $type,\n 'phoneNumbers' => [],\n ];\n\n if ($type === 'account') {\n $record['industry'] = $properties['industry'] ?? null;\n } else {\n $record['title'] = $properties['jobtitle'] ?? null;\n $record['organization'] = $properties['company'] ?? null;\n }\n\n $countryCode = $this->buildContactCountry($properties);\n $parsedNumber = $this->buildContactPhone($countryCode, $properties);\n\n // Add phone number to record.\n if (! empty($parsedNumber['phone'])) {\n $record['phoneNumbers'][] = [\n 'number' => $parsedNumber['phone'],\n 'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),\n 'type' => 'phone',\n ];\n }\n\n // Add mobile phone number to record.\n if (! empty($properties['mobilephone'])) {\n $mobileNumber = phone_e164($countryCode, $properties['mobilephone']);\n if ($mobileNumber !== null) {\n $record['phoneNumbers'][] = [\n 'number' => $mobileNumber,\n 'nationalFormat' => phone_national($countryCode, $mobileNumber),\n 'type' => 'mobile',\n ];\n }\n }\n\n $data[] = $record;\n }\n } catch (BadRequest $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->getUuid(),\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n }\n\n return $data;\n },\n );\n }\n\n\n /**\n * @inheritdoc\n */\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n $ownerId = null;\n\n if ($crmAccountId === null) {\n return $data;\n }\n\n if ($userId) {\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n $ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n $closedStages = $this->getClosedDealStages();\n $payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(\n $this->config,\n $crmAccountId,\n $closedStages,\n );\n\n $results = $this->client->getPaginatedData($payload, 'deals');\n\n foreach ($results['results'] as $object) {\n $properties = $object['properties'];\n\n $amount = null;\n if (empty($properties['amount']) === false) {\n $currency = $properties['deal_currency_code'] ?? $this->config->default_currency;\n\n // Values can contain commas and any junk so strip them.\n $value = (float) preg_replace('/[^\\d.]/', '', $properties['amount']);\n $amount = formatCurrency($value, $currency);\n }\n\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n\n if ($businessProcess === null) {\n // Import it.\n $stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n } else {\n $stage = $businessProcess\n ->stages()\n ->where('crm_provider_id', $properties['dealstage'])\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n if ($stage === null) {\n // Import it.\n $stage = $this->importStages(null, $properties['dealstage']);\n }\n }\n\n $recordType = null;\n if ($businessProcess) {\n $recordType = $businessProcess->recordTypes()->first();\n }\n\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $record = [\n 'crmId' => $object['id'],\n 'name' => $properties['dealname'] ?? 'Unknown Deal',\n 'value' => $amount,\n 'won' => $isWon,\n 'closed' => $isWon || $isLost,\n 'stage' => [\n 'id' => $stage?->getUuid() ?? '',\n 'name' => $stage?->getName() ?? '',\n ],\n ];\n\n if ($recordType) {\n $record += [\n 'recordType' => [\n 'id' => $recordType->id_string,\n 'name' => $recordType->name,\n ],\n ];\n }\n\n if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n }\n\n /**\n * @inheritdoc\n */\n public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array\n {\n $data = [];\n switch ($objectType) {\n case 'contact':\n $hsObject = 'contact';\n\n break;\n case 'account':\n $hsObject = 'company';\n\n break;\n default:\n // This is a hack to prioritise and override a contact/company with a deal.\n if ($opportunityId) {\n $hsObject = 'deal';\n $objectId = $opportunityId;\n } else {\n throw new InvalidArgumentException('Object type not supported.');\n }\n }\n\n $engagementTypes = ['meetings', 'tasks'];\n\n foreach ($engagementTypes as $engagementType) {\n $payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);\n\n $this->logger->info('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n $engagements = $this->client->getPaginatedData($payload, $engagementType);\n\n foreach ($engagements['results'] as $engagement) {\n if ($engagementType == 'meetings') {\n $title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';\n } elseif ($engagementType == 'tasks') {\n $title = $engagement['properties']['hs_task_subject'];\n } else {\n $title = 'Scheduled meeting';\n }\n\n $data[] = [\n 'crmId' => $engagement['id'],\n 'subject' => $title,\n 'due' => $engagement['properties']['hs_timestamp'],\n 'type' => $engagement['properties']['hs_activity_type'] ?? null,\n ];\n }\n }\n\n usort($data, function ($item1, $item2) {\n return $item2['due'] <=> $item1['due'];\n });\n\n return $data;\n }\n\n /**\n * Try to find CRM Objects using email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchExactlyByEmail(string $email, ?int $userId = null): ?array\n {\n $contactProperties = [\n 'email',\n// 'firstname',\n// 'lastname',\n// 'country',\n// 'phone',\n// 'mobilephone',\n// 'jobtitle',\n// 'hubspot_owner_id',\n// 'associatedcompanyid',\n// 'photo',\n ];\n $contact = null;\n $account = null;\n\n try {\n $hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);\n return null;\n\n if ($hsContact) {\n $contact = $this->importContact($hsContact);\n $account = $contact->account;\n }\n\n $data = $this->convertCrmData($contact, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n } catch (BadRequest $e) {\n $this->logger->warning('[HubSpot] Search failed', [\n 'team_id' => $this->team->getId(),\n 'search_identifier' => $email,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return null;\n }\n\n public function getDomain(string $email): ?string\n {\n return $this->getDomainFromEmail($email);\n }\n\n /**\n * Try to find CRM objects using domain name of the email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByDomain(string $domain, ?int $userId = null): ?array\n {\n $companyName = $domain;\n\n // Try to find a company matching their email domain.\n $companyProperties = [\n 'country',\n 'phone',\n 'name',\n 'hs_avatar_filemanager_key',\n 'industry',\n 'hubspot_owner_id',\n 'domain',\n ];\n\n try {\n $hsAccounts = $this->client\n ->getInstance()\n ->companies()\n ->searchByDomain($companyName, $companyProperties);\n } catch (Throwable $e) {\n $this->logger->info('[HubSpot] Search failed', [\n 'error' => $e->getMessage(),\n 'domain' => $domain,\n ]);\n\n return null;\n }\n\n $account = null;\n // If there are multiple accounts, don't guess, we'll ask later.\n if (\\count($hsAccounts->data->results) === 1) {\n // Persist this remote object.\n $account = $this->syncAccount($hsAccounts->data->results[0]->companyId);\n }\n\n $data = $this->convertCrmData(null, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n }\n\n /**\n * @return array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array\n {\n $countryCode = null;\n if ($contact && $contact->country_code) {\n $countryCode = $contact->country_code;\n } elseif ($account && $account->country_code) {\n $countryCode = $account->country_code;\n }\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact ? $contact->crm_provider_id : null,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n // If there are multiple opportunities, don't guess, we'll ask later.\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n protected function getCacheKey(string $object, ?int $userId = null): ?string\n {\n $key = $this->team->getId() . $object;\n $keySuffix = $this->getOwnerKeySuffix($userId);\n\n return $key . $keySuffix;\n }\n\n private function getOwnerKeySuffix(?int $userId = null): string\n {\n return $userId === null ? '' : (string) $userId;\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n *}\n */\n public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array\n {\n if (str_contains($phone, '**')) {\n return null;\n }\n\n // trim all whitespaces if present so the lookup doesn't fail\n $phone = str_replace(' ', '', $phone);\n\n // Check if the user is internal.\n if ($this->isPhoneNumberOfTeamMember($phone)) {\n return null;\n }\n\n $response = $this->searchForPhoneNumber($phone);\n if (empty($response)) {\n return null;\n }\n\n // This would ideally importContact instead but the response type differs.\n $contact = $this->findAndSyncContact($response['results'][0]['id']);\n if (! $contact instanceof Contact) {\n return null;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account?->crm_provider_id,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n\n try {\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n } catch (Exception $e) {\n $this->logger->debug('[HubSpot] Opportunity failed to sync.', [\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n private function isPhoneNumberOfTeamMember(string $phone): bool\n {\n $teamRepository = app(TeamRepository::class);\n $user = $teamRepository->findTeamMemberByPhone($this->team, $phone);\n\n if ($user instanceof User) {\n return true;\n }\n\n return false;\n }\n\n private function findAndSyncContact(string $crmId): ?Contact\n {\n try {\n return $this->syncContact($crmId);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'reason' => $exception->getMessage(),\n ]);\n\n return null;\n }\n }\n\n private function hasResults(array $response): bool\n {\n return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;\n }\n\n private function searchForPhoneNumber(string $phone): array\n {\n // Normalizes the provided phone number for the API search.\n $normalizedPhone = $this->normalizePhoneNumber($phone);\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);\n\n $this->logger->info('[HubSpot] Phone match search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);\n\n if (! $this->hasResults($response)) {\n $nationalPhone = preg_replace('/\\D/', '', phone_national(null, $phone));\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);\n\n $this->logger->info('[HubSpot] Phone match national number search triggered', [\n 'phone' => $phone,\n 'nationalPhone' => $nationalPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n if (! $this->hasResults($response)) {\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);\n\n $this->logger->info('[HubSpot] Phone match alternative search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n return $this->hasResults($response) ? $response : [];\n }\n\n private function handlePhoneSearchRequest(string $phone, array $payload): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/contacts/search';\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n $endpoint,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'phone' => $phone,\n 'reason' => $exception->getMessage(),\n ]);\n\n return [];\n }\n\n $this->logger->info('[HubSpot] Phone match completed', [\n 'phone' => $phone,\n 'response' => $response,\n ]);\n\n return $response->toArray();\n }\n\n private function normalizePhoneNumber(string $phone): string\n {\n return ltrim(phone_e164(null, $phone), '+0');\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByName(string $name, ?int $userId = null): ?array\n {\n // Don't waste time searching for single character strings.\n if (\\strlen($name) <= 1) {\n return null;\n }\n\n $cacheKey = $this->getCacheKey($name, $userId);\n\n $result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {\n $payload = $this->payloadBuilder->generateSearchContactsByNamePayload(\n $name,\n $this->getContactFields()\n );\n\n $hsContacts = $this->client->getPaginatedData($payload, 'contact');\n if (empty($hsContacts['results'])) {\n return false;\n }\n\n $contact = $this->importContact($hsContacts['results'][0]);\n if ($contact === null) {\n return false;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n });\n\n return is_array($result) ? $result : null;\n }\n\n\n private function convertActivityAssociations(Activity $activity): array\n {\n return [\n 'contactIds' => $this->getParticipantsIds($activity),\n 'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],\n 'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],\n 'ownerIds' => [],\n ];\n }\n\n private function getParticipantsIds(Activity $activity): array\n {\n $attendees = [];\n\n $participantRepository = app(ParticipantRepository::class);\n $participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);\n foreach ($participants as $participant) {\n if ($participant->user_id || $participant->isCoach()) {\n continue;\n }\n\n $contact = $participant->contact()->first();\n if ($contact && $contact->crm_provider_id) {\n $attendees[] = $contact->crm_provider_id;\n } else {\n if (! empty($participant->name)) {\n $attendeeData = $this->fetchMissingAttendeeInfo($participant);\n }\n if (! empty($attendeeData['id'])) {\n $attendees[] = $attendeeData['id'];\n }\n }\n }\n\n if ($activity->hasContact()) {\n $attendees[] = $activity->contact->crm_provider_id;\n }\n\n return array_unique($attendees);\n }\n\n private function fetchMissingAttendeeInfo(Participant $participant): array\n {\n // Check if we need to look inside an account context.\n $activity = $participant->getActivity();\n $companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;\n\n // First check the local data.\n /** @var Contact[] $contacts */\n $contacts = $this->team->contacts()\n ->with('account')\n ->where('name', $participant->name)\n ->whereNotNull('email')\n ->get();\n\n foreach ($contacts as $contact) {\n // If we have a company in scope, check the contact is associated to it.\n if (\n $companyId !== null\n && ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)\n ) {\n continue;\n }\n\n return [\n 'id' => $contact->crm_provider_id,\n 'email' => $contact->email,\n ];\n }\n\n $payload = $this->generateNameSearchPayload($participant->name, 0, 20);\n\n try {\n $response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);\n\n // TODO add some logic to choose the most suitable contact if multiple\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n if (empty($object['properties']) === false) {\n // Check the company matches the contact.\n // Todo: Move this check inside the API search.\n if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {\n continue;\n }\n\n return [\n 'id' => $object['id'],\n 'email' => $properties['email'],\n ];\n }\n }\n } catch (Exception $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->id_string,\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [];\n }\n\n /**\n * Store transcripts as note engagement.\n *\n * @throws Exception\n */\n public function createTranscriptNotes(Activity $activity): void\n {\n // For HS no need to check if Crm profile - Log Notes field is enabled\n // We only check if store_transcript toggle is enabled on crm profile.\n $engagement = [\n 'active' => true,\n 'ownerId' => $this->profile->crm_provider_id,\n 'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,\n 'type' => 'NOTE',\n ];\n\n // Generate activity transcription.\n $transcriptionData = $this->generateTranscription($activity);\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);\n\n $metadata = [\n 'body' => $transcripts,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsEngagement = $this->client\n ->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $noteId = $hsEngagement->data->engagement->id;\n\n // Store crm logged id in transcription.\n $transcription = $activity->getTranscription();\n $transcription->crm_activity_id = $noteId;\n $transcription->save();\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $payload = [\n 'properties' => $data,\n ];\n\n try {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n $this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);\n\n break;\n case FieldData::OBJECT_CONTACT:\n $this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_ACCOUNT:\n $this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_TASK:\n // Endpoint for Engagements not ready\n $engagements = [\n 'type' => 'TASK',\n ];\n $metadata = $data;\n $this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $objectId],\n $metadata,\n );\n\n break;\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $apiException) {\n $errorMessage = $apiException->getMessage();\n if ($apiException->getResponseBody()) {\n $responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);\n $errorMessage = $responseBody['message'] ?? $apiException->getMessage();\n }\n\n $this->logger->error(\n '[HubSpot] Update record failed',\n [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'payload' => $payload,\n 'reason' => $errorMessage,\n 'team' => $this->team->getUuid(),\n ]\n );\n\n throw new CrmException($errorMessage);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n return $this->client->getInstance()->deals()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_CONTACT:\n return $this->client->getInstance()->contacts()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_ACCOUNT:\n return $this->client->getInstance()->companies()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_TASK:\n return $this->client->getInstance()->engagements()->get($objectId)->toArray();\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n }\n\n /**\n * @throws BadRequest\n * @throws CrmException\n */\n public function updateStage($crmObject, Stage $stage): void\n {\n $payload = [\n 'properties' => [\n [\n 'name' => 'dealstage',\n 'value' => $stage->crm_provider_id,\n ],\n ],\n ];\n\n try {\n $this->client->getInstance()->deals()->update($crmObject->crm_provider_id, $payload);\n } catch (BadRequest $badRequest) {\n if ($badRequest->getCode() === 403) {\n throw new CrmException(\n \"Sorry, you don't have permission to update this stage.\",\n $badRequest->getCode(),\n $badRequest,\n );\n }\n\n $this->logger->warning('[HubSpot] Stage update failed', [\n 'dealId' => $crmObject->crm_provider_id,\n 'payload' => $payload,\n 'message' => $badRequest->getMessage(),\n ]);\n\n throw $badRequest;\n }\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n $url = null;\n $baseUrl = 'https://app.hubspot.com/contacts/' . $this->config->crm_provider_id . '/';\n\n switch ($objectType) {\n case 'account':\n $url = $baseUrl . 'company/' . $providerId;\n\n break;\n\n case 'contact':\n $url = $baseUrl . 'contact/' . $providerId;\n\n break;\n\n case 'opportunity':\n $url = $baseUrl . 'deal/' . $providerId;\n\n break;\n\n case 'task':\n case 'activity':\n return null;\n\n // This should not be deep-linked as per JMNY-3934.\n //$url = $baseUrl.'tasks/list/view/all/?taskId='.$providerId;\n break;\n }\n\n return $url;\n }\n\n public function searchCalls(Carbon $from, Carbon $to, string $activityProvider): array\n {\n $this->logger->info('[HubSpot] Search calls', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $calls = [];\n $page = 1;\n\n do {\n try {\n $payload = $this->payloadBuilder->generateGetCallsPayload($from, $to, $activityProvider, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n $calls = array_merge($calls, $responseResults);\n $page++;\n } while (! empty($responseResults));\n\n return $calls;\n }\n\n public function searchCallsForPeriodByPage(Carbon $from, Carbon $to, int $page, bool $retry = true)\n {\n try {\n $payload = $this->payloadBuilder->generateSearchCallsByPeriodPayload($from, $to, $page);\n $response = $this->client->getInstance()->getClient()->request(\n 'POST',\n self::CALLS_SEARCH_ENDPOINT,\n ['json' => ($payload)],\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls for period failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallsForPeriodByPage($from, $to, $page, false);\n }\n $response = null;\n }\n\n return $response;\n }\n\n public function searchCallsForPeriod(Carbon $from, Carbon $to): Generator\n {\n $this->logger->info('[HubSpot] Search calls for period', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $page = 1;\n\n do {\n $response = $this->searchCallsForPeriodByPage($from, $to, $page);\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n\n $associationContacts = $this->getAssociationDataForCollection($responseResults, 'calls', 'contacts');\n $associationCompanies = $this->getAssociationDataForCollection($responseResults, 'calls', 'companies');\n $associationDeals = $this->getAssociationDataForCollection($responseResults, 'calls', 'deals');\n\n foreach ($responseResults as $call) {\n $call['associations'] = [\n 'contacts' => $this->importAssociationData($call, $associationContacts),\n 'companies' => $this->importAssociationData($call, $associationCompanies),\n 'deals' => $this->importAssociationData($call, $associationDeals),\n ];\n\n yield $call;\n }\n $page++;\n } while (! empty($responseResults));\n }\n\n public function getCall(string $callId): array\n {\n $this->logger->info('[HubSpot] Get call', [\n 'call_id' => $callId,\n ]);\n\n $searchAttributes = $this->payloadBuilder->getSearchCallAttributes();\n $endpoint = sprintf(\n 'https://api.hubapi.com/crm/v3/objects/calls/%s',\n $callId,\n );\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'GET',\n $endpoint,\n [],\n sprintf(\n 'properties=%s&associations=contacts,companies,deals',\n implode(',', $searchAttributes),\n ),\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Get call failed', [\n 'call_id' => $callId,\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n return empty($response) ? [] : $response->toArray();\n }\n\n public function bulkAddPlaybackURLToDescription(array $crmUpdateData): array\n {\n $crmUpdateBatches = array_chunk($crmUpdateData, self::BATCH_UPDATE_LIMIT);\n\n $updatedCrmIds = [];\n\n foreach ($crmUpdateBatches as $crmBatch) {\n $payload = $this->payloadBuilder->generatePlaybackAddUrlBatchPayload($crmBatch);\n $updateSuccess = $this->bulkAddPlaybackURLToDescriptionRequest($payload);\n if ($updateSuccess) {\n $updatedCrmIds = array_merge($updatedCrmIds, array_column($crmBatch, 'crm_id'));\n }\n }\n\n return $updatedCrmIds;\n }\n\n private function bulkAddPlaybackURLToDescriptionRequest(array $payload, bool $retry = true): bool\n {\n try {\n $this->client->getNewInstance()->crm()->objects()->batchApi()->update('calls', $payload);\n\n return true;\n } catch (\\HubSpot\\Client\\Crm\\Objects\\ApiException $e) {\n $response = json_decode($e->getResponseBody(), true);\n $retryAfter =\n isset($response['policyName'])\n && $response['policyName'] == self::TEN_SECONDLY_ROLLING_POLICY\n ? self::TEN_SECONDLY_ROLLING_LIMIT\n : 1;\n } catch (Exception $e) {\n $retryAfter = 1;\n }\n\n $this->logger->warning('[HubSpot] Bulk add playback url to CRM failed', [\n 'reason' => $e->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep($retryAfter);\n\n return $this->bulkAddPlaybackURLToDescriptionRequest($payload, false);\n }\n\n return false;\n }\n\n /**\n * Sometimes we have secondly rate limit error, then retry request after 1 second\n */\n public function searchCallByRecordingURLToken(string $playbackURLToken, bool $retry = true): array\n {\n $endpoint = 'https://api.hubapi.com/crm/v3/objects/calls/search';\n $payload = $this->payloadBuilder->generateSearchCallByTokenPayload($playbackURLToken);\n\n $this->logger->info('[HubSpot] CRM Search by playback URL token requested', [\n 'request' => $payload,\n ]);\n\n try {\n $response = $this->client->getInstance()->getClient()->request('POST', $endpoint, ['json' => ($payload)]);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search by playback URL token failed', [\n 'playbackURLToken' => $playbackURLToken,\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallByRecordingURLToken($playbackURLToken, false);\n }\n\n return [];\n }\n\n return empty($response['results']) ? [] : $response['results'][0];\n }\n\n /**\n * Generate transcription for the activity.\n */\n private function generateTranscription(Activity $activity): string\n {\n if (! $this->config->store_transcript) {\n // If sending transcription to activity toggle is disabled\n return '';\n }\n\n $transcriptionSegments = $this->transcriptionService->findTranscriptionByActivity($activity);\n\n if ($transcriptionSegments->isEmpty()) {\n return '';\n }\n\n $transcription = sprintf(\n '<p><strong>Transcript for %s</strong></p><p></p>',\n $activity->title ?? $activity->activity_title,\n );\n\n $roomOwnerParticipant = $activity->findParticipantRoomOwner();\n $roomOwnerParticipantId = $roomOwnerParticipant !== null\n ? $roomOwnerParticipant->getId()\n : null;\n\n\n $transcription .= $transcriptionSegments\n ->map(static function (array $transcriptionSegment) use ($roomOwnerParticipantId): string {\n $isOrganiser = $roomOwnerParticipantId === $transcriptionSegment['participantId']\n && $roomOwnerParticipantId !== null;\n $transcriptColor = $isOrganiser ? '#000000' : '#f0415a';\n\n return sprintf(\n '<span style=\"color: %s;\">%s | </span>%s',\n $transcriptColor,\n $transcriptionSegment['formattedStartsAt'],\n $transcriptionSegment['transcript'],\n );\n })\n ->implode('<br />');\n\n return $transcription;\n }\n\n /**\n * @param array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }> $options\n *\n * @return FieldData[]\n */\n private function importOptions(Field $field, array $options): array\n {\n $fieldValues = [];\n $values = [];\n $sequence = 0;\n\n foreach ($options as $option) {\n $values[] = [\n 'value' => $option['value'] ?? $option['id'],\n 'label' => substr($option['label'], 0, 255),\n 'sequence' => $sequence++,\n ];\n }\n\n $fieldsToPurge = $field->values()->get()->pluck('value')->toArray();\n\n foreach ($values as $value) {\n $value['value'] = substr($value['value'], 0, 255);\n $fieldValues[] = $field->values()->updateOrCreate([\n 'value' => $value['value'],\n ], $value);\n\n // Remove this value from the ones we are going to purge.\n if (($key = array_search($value['value'], $fieldsToPurge, false)) !== false) {\n unset($fieldsToPurge[$key]);\n }\n }\n\n // Delete the old values that are no longer used.\n $field->values()->whereIn('value', $fieldsToPurge)->delete();\n\n return $fieldValues;\n }\n\n public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null || $objectId === null) {\n return null;\n }\n\n /** @var User $user */\n $user = $activity->getUser();\n\n $profile = $this->assignCrmOwner($user, $activity);\n if (! $profile instanceof Profile) {\n return null;\n }\n\n $timestamp = Carbon::now($user->getTimezone())->getTimestamp() * 1000;\n $engagement = [\n 'active' => true,\n 'ownerId' => $profile->getAttribute('crm_provider_id'),\n 'timestamp' => $timestamp,\n 'type' => 'NOTE',\n ];\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $body = mb_strimwidth($body, 0, self::ENGAGEMENT_BODY_MAX_LENGTH);\n $metadata = [\n 'body' => $body,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsActivityId = $this->client->createNote(\n body: $body,\n ownerId: $profile->getCrmProviderId(),\n timestamp: $timestamp,\n objectId: $objectId,\n noteObject: $noteObject,\n );\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $this->logger->info('[HubSpot] Saving Transcription Summary as Note', [\n 'activity' => $activity->getUuid(),\n 'crmActivity' => $hsActivityId,\n ]);\n\n return $hsActivityId;\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function attachSummaryToActivity(ActivityContract $activity, string $summaryTitle, string $summaryContents): bool\n {\n $this->logger->info('[HubSpot] Attaching summary to activity', [\n 'activity' => $activity->getUuid(),\n 'summary_content' => $summaryContents,\n ]);\n\n if (! $activity instanceof Activity) {\n throw new InvalidArgumentException('Expected instance of Activity');\n }\n\n $summary = '<p><strong>' . $summaryTitle . '</strong></p>';\n $summary .= '<p>' . $summaryContents . '</p>';\n $metadata = $this->buildMetadataForSummaryUpdate($activity, $summary);\n\n try {\n $type = $this->matchActivityEngagementType($activity);\n $engagement = ['type' => $type];\n\n $this->client->updateEngagement($activity->getCrmProviderId(), $engagement, $metadata);\n } catch (Exception $e) {\n $this->logger->warning('[HubSpot] Update summary failed', [\n 'activity' => $activity->getUuid(),\n 'reason' => $e->getMessage(),\n ]);\n\n return false;\n }\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $activity->getCrmProviderId()],\n $metadata,\n );\n\n return true;\n }\n\n private function buildMetadataForSummaryUpdate(Activity $activity, string $summary): array\n {\n $descriptionField = $activity->getType() === Activity::TYPE_CONFERENCE ? 'internalMeetingNotes' : 'body';\n $engagement = $this->client->getEngagementData($activity->getCrmProviderId());\n // Meeting without internalMeetingNotes might mean it just does not have any notes;\n $description = $engagement['metadata'][$descriptionField] ?? null;\n\n if (empty($description)) {\n $data = $summary;\n } else {\n // avoid playbook url link to Jiminny being sent twice in the activity description\n $targetUrl = PlaybackUrlBuilder::build($activity);\n\n if (str_contains($description, $targetUrl)) {\n $jiminnyUrl = '<p><a href=\"' . $targetUrl . '\" title=\"Play at Jiminny\">Play at Jiminny</a></p>';\n $summary = str_replace($jiminnyUrl, '', $summary);\n\n $this->logger->info('[HubSpot] Summary modified', [\n 'activity' => $activity->getUuid(),\n 'target_url' => $jiminnyUrl,\n 'modified_summary_content' => $summary,\n ]);\n }\n\n $data = $description . '<p></p>' . $summary;\n }\n\n return [\n $descriptionField => $data,\n ];\n }\n\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n return $this->syncRelatedActivityManager->fetchAndAssociateRelatedActivity($activity);\n }\n\n public function fetchRelatedActivity(Activity $activity): array\n {\n return [];\n }\n\n public function getDealsInBulk(array $dealIds): array\n {\n $payload = $this->payloadBuilder->getDealsInBulkPayload($dealIds);\n\n return $this->client->getPaginatedData($payload, 'deals');\n }\n\n /**\n * Extract deal IDs from HubSpot search response.\n *\n * @param array $hubspotResponse The raw HubSpot search API response.\n * @param bool $includeArchived Whether to include archived deals (default: false).\n *\n * @return string[] Array of deal IDs as strings.\n */\n public function extractDealIds(array $hubspotResponse, bool $includeArchived = false): array\n {\n if (empty($hubspotResponse['results'])) {\n return [];\n }\n\n return array_values(\n array_map(\n fn ($deal) => $deal['id'],\n array_filter(\n $hubspotResponse['results'],\n fn ($deal) => $includeArchived || empty($deal['archived'])\n )\n )\n );\n }\n\n public function matchActivityEngagementType(Activity $activity): string\n {\n return match ($activity->getType()) {\n Activity::TYPE_CONFERENCE => self::TYPE_MEETING,\n Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND => self::TYPE_CALL,\n default => self::TYPE_NOTE,\n };\n }\n\n private function assignCrmOwner(User $user, ActivityContract $activity): ?Profile\n {\n $profile = $user->getProfile();\n if ($profile instanceof Profile) {\n return $profile;\n }\n\n $this->logger->info('[HubSpot] Unable to save summary. No profile', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n private static function getDealsPipelinesEndpoint(): string\n {\n return self::API_URL . self::ENDPOINT_PIPELINES . self::PIPELINE_OBJECT_TYPE_DEALS;\n }\n\n public function verifyTaskExists(Activity $activity): bool\n {\n $crmProviderId = $activity->getCrmProviderId();\n $cacheKey = \"crm_task_exists:{$this->config->getId()}:$crmProviderId\";\n\n return Cache::remember($cacheKey, self::TASK_VERIFICATION_CACHE_TTL, function () use ($crmProviderId) {\n try {\n $engagement = $this->client->getEngagementData($crmProviderId);\n\n return ! empty($engagement);\n } catch (HttpNotFoundException|BadRequest) {\n // Engagement not found in CRM - this is expected and permanent\n $this->logger->info('[Hubspot] Engagement not found during verification', [\n 'engagement_id' => $crmProviderId,\n 'config_id' => $this->config->getId(),\n ]);\n\n return false;\n }\n // Let other exceptions (network errors, rate limits, etc.) bubble up for retry\n });\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3248289386434438233
|
-465722764674590617
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring start {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring end {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
Sync Changes
Hide This Notification
Code changed:
Hide
8
51
1
33
1
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Services\Crm\Hubspot;
use Carbon\Carbon;
use Exception;
use Generator;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Cache;
use InvalidArgumentException;
use Jiminny\Contracts\Repositories\TeamRepository;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\HubspotInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SavePlaybackLinkToCrmInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Contracts\Services\Crm\VerifyTaskExistsInterface;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\HttpNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contact;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Participant;
use Jiminny\Models\Playbook;
use Jiminny\Models\SocialAccount;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Repositories\Crm\FieldRepository;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\ParticipantRepository;
use Jiminny\Services\Avatar\ProspectPhotoPathService;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\Hubspot\Actions\SyncArchivedProfilesAction;
use Jiminny\Services\Crm\Hubspot\Fields\ValueNormalizer;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\OpportunitySyncTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncFieldsTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\WriteCrmTrait;
use Jiminny\Services\Crm\MatchDomainByEmailInterface;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Services\Crm\ResolveCompanyNameByEmailTrait;
use Jiminny\Utils\PlaybackUrlBuilder;
use Sentry;
use SevenShores\Hubspot\Exceptions\BadRequest;
use Throwable;
use UnexpectedValueException;
/**
* @phpstan-type CrmFieldDefinition array{
* name: string,
* label: string,
* description: string,
* type: string,
* fieldType: string,
* hidden: bool,
* showCurrencySymbol: bool,
* options: array<array{
* id: string,
* label: string,
* value?: string,
* }
*/
class Service extends BaseService implements
HubspotInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
SendSummaryToCrmInterface,
MatchDomainByEmailInterface,
SavePlaybackLinkToCrmInterface,
RemoteEntityManipulationInterface,
FetchRelatedActivityInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
VerifyTaskExistsInterface
{
use ResolveCompanyNameByEmailTrait;
use SyncCrmEntitiesTrait;
use WriteCrmTrait;
use SyncFieldsTrait;
use OpportunitySyncTrait;
private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;
private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';
private const int BATCH_UPDATE_LIMIT = 100;
private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';
private const int TEN_SECONDLY_ROLLING_LIMIT = 10;
private const string CALLS_SEARCH_ENDPOINT = '[URL_WITH_CREDENTIALS] ClientInterface|Client
*/
protected $client;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected ProspectPhotoPathService $prospectPhotoPathService;
private SyncFieldAction $syncFieldAction;
private PayloadBuilder $payloadBuilder;
private SyncRelatedActivityManager $syncRelatedActivityManager;
private SyncArchivedProfilesAction $syncArchivedProfilesAction;
private WebhookSyncBatchProcessor $batchProcessor;
public function __construct(
Client $client,
SyncFieldAction $syncFieldAction,
PayloadBuilder $payloadBuilder,
ProspectPhotoPathService $prospectPhotoPathService,
SyncArchivedProfilesAction $syncArchivedProfilesAction,
WebhookSyncBatchProcessor $batchProcessor,
) {
parent::__construct();
$this->client = $client;
$this->syncFieldAction = $syncFieldAction;
$this->prospectPhotoPathService = $prospectPhotoPathService;
$this->payloadBuilder = $payloadBuilder;
$this->syncArchivedProfilesAction = $syncArchivedProfilesAction;
$this->batchProcessor = $batchProcessor;
$this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [
'client' => $this->client,
]);
$this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [
'client' => $this->client,
'payloadBuilder' => $this->payloadBuilder,
'logger' => $this->logger,
]);
$this->crmEntityRepository = app(CrmEntityRepository::class);
$this->dealFieldsService = app(DealFieldsService::class);
}
public function getDisplayName(): string
{
return 'HubSpot';
}
protected function getOAuthAccount(User $user): ?SocialAccount
{
// In this case, the Account Owner is always the connection for any API operations.
$owner = $user->team->owner;
return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);
}
public function getClient(): Client
{
/** @var Client */
return $this->client;
}
/**
* Convert raw field data into a format compatible with CRM APIs.
*
* @param bool $internal Direction of the conversion.
* True is pulling from CRM, false normalize before sending to CRM.
*/
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return ValueNormalizer::normalize(
fieldType: $fieldType,
fieldValue: $fieldValue,
isInbound: $internal,
);
}
/**
* @inheritdoc
*/
public function getDefaultFields(string $activityType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
$defaultFields = FieldDefinitions::defaultTaskFields();
// This lazy creates these fields if not already setup.
foreach ($defaultFields as $defaultField) {
$fields[] = $this->config->fields()->firstOrCreate($defaultField);
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function getDefaultActivityField(string $activityType): Field
{
/** @var Field $activityField */
$activityField = $this->config->fields()->where([
'crm_provider_id' => 'activityType',
'object_type' => $activityType,
])->first();
return $activityField;
}
/**
* @inheritdoc
*/
public function getSupportedPlaybookTypes(): array
{
return [Playbook::ACTIVITY_TYPE_TASK];
}
/**
* @inheritdoc
*/
public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
// Outcome should always be provided calls/meetings.
$fieldData = [
[
'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',
'object_type' => Field::OBJECT_TASK,
],
];
foreach ($fieldData as $data) {
$field = $this->config->fields()->where($data)->first();
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
}
return $fields;
}
public function getDealInsightsFields(): array
{
return FieldDefinitions::dealInsightsFields();
}
protected function getDefaultFollowupLayoutFields(string $activityType): array
{
$fields = [];
$fieldRepo = app(FieldRepository::class);
$fieldData = FieldDefinitions::followupFieldsFilter();
foreach ($fieldData as $data) {
$field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function syncField(Field $field): void
{
switch ($field->object_type) {
case Field::OBJECT_ACCOUNT:
$crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_CONTACT:
$crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_OPPORTUNITY:
$crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_TASK:
$this->syncSingleTaskField($field);
return;
default:
return;
}
$this->syncFieldAction->execute($field, $crmField->toArray());
}
/**
* @param array<array{
* id:string,
* label:string,
* value?:string
* }> $options
*
* @throws CrmException
*
* @return FieldData[]
*
*/
public function importPicklistValues(
Field $field,
array $options = [['id' => '', 'label' => '', 'value' => '']],
): array {
if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {
// We already have the options, no need to fetch them again
return $this->importOptions($field, $options);
}
$options = [];
switch ($field->getObjectType()) {
case Field::OBJECT_ACCOUNT:
$options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());
break;
case Field::OBJECT_CONTACT:
$options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());
break;
case Field::OBJECT_OPPORTUNITY:
// Hubspot has different endpoint for stages
$options = $this->getClient()->fetchOpportunityFieldOptions($field);
break;
case Field::OBJECT_TASK:
if ($field->getCrmProviderId() === 'disposition') {
$options = $this->getClient()->fetchDispositionFieldOptions();
} elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {
$options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);
}
break;
default:
$this->logger->warning('Invalid object type', [
'object_type' => $field->getObjectType(),
'field_id' => $field->getId(),
]);
throw new CrmException('Invalid object type');
}
return $this->importOptions($field, $options);
}
/**
* @inheritdoc
*/
public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage
{
$missingStage = null;
try {
// Use the HubSpot API client instead of the SDK crmPipelines() method
$endpoint = self::getDealsPipelinesEndpoint();
$pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);
$pipelines = $pipelinesResponse->data->results;
} catch (RequestException|BadRequest $exception) {
throw $exception;
}
foreach ($pipelines as $pipeline) {
$stages = [];
// We create a business process to contain the pipeline, and store all stages against it.
$p = ResponseNormalize::normalizePipeline($pipeline);
// Create/update business process for this pipeline
$businessProcess = $this->config->businessProcesses()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'type' => BusinessProcess::TYPE_OPPORTUNITY,
'is_selectable' => $p['active'],
]);
// A record type is really a clone of the business process, used to store which record uses which pipeline.
// Create/update record type clone
$this->config->recordTypes()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'is_selectable' => $p['active'],
'business_process_id' => $businessProcess->id ?? null,
]);
// Stages - fetch all existing stages upfront to avoid N+1 queries
$existingStages = $this->config->stages()
->withTrashed()
->where('type', Stage::TYPE_OPPORTUNITY)
->get()
->keyBy('crm_provider_id');
foreach ($p['stages'] as $dealStage) {
$s = ResponseNormalize::normalizeDealStage($dealStage);
/** @var ?Stage $existingStage */
$existingStage = $existingStages->get($s['id']);
// Restore soft-deleted stages that are now active in HubSpot
if ($existingStage?->trashed() && $s['active']) {
$existingStage->restore();
}
// Upsert stage (updates soft-deleted records without restoring them)
$stage = $this->config->stages()->withTrashed()->updateOrCreate([
'crm_provider_id' => $s['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($s['label'], 0, 50),
'label' => mb_strimwidth($s['label'], 0, 191),
'type' => Stage::TYPE_OPPORTUNITY,
'sequence' => $s['displayOrder'],
'is_selectable' => $s['active'],
'probability' => $s['probability'] * 100,
]);
if ($missingStageName === $s['id']) {
$missingStage = $stage;
}
$stages[] = $stage->id;
}
$businessProcess->stages()->sync($stages);
}
return $missingStage;
}
/**
* @inheritdoc
*/
public function syncOrganization(): void
{
try {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function find(string $name, array $scopes): array
{
$count = $this->limit ?? 20;
$offset = $this->offset ?? 0;
/** @var array<int, array<string, mixed>> */
return Cache::remember(
key: $this->team->getId() . $name . $count . $offset,
ttl: 300,
callback: function () use ($name, $offset, $count): array {
$data = [];
// Use the new V3 API to find contacts based on additional fields.
foreach (['companies', 'contacts'] as $objectType) {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$ownerId = null;
if ($crmAccountId === null) {
return $data;
}
if ($userId) {
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
$ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
$closedStages = $this->getClosedDealStages();
$payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(
$this->config,
$crmAccountId,
$closedStages,
);
$results = $this->client->getPaginatedData($payload, 'deals');
foreach ($results['results'] as $object) {
$properties = $object['properties'];
$amount = null;
if (empty($properties['amount']) === false) {
$currency = $properties['deal_currency_code'] ?? $this->config->default_currency;
// Values can contain commas and any junk so strip them.
$value = (float) preg_replace('/[^\d.]/', '', $properties['amount']);
$amount = formatCurrency($value, $currency);
}
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
if ($businessProcess === null) {
// Import it.
$stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
} else {
$stage = $businessProcess
->stages()
->where('crm_provider_id', $properties['dealstage'])
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
if ($stage === null) {
// Import it.
$stage = $this->importStages(null, $properties['dealstage']);
}
}
$recordType = null;
if ($businessProcess) {
$recordType = $businessProcess->recordTypes()->first();
}
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$record = [
'crmId' => $object['id'],
'name' => $properties['dealname'] ?? 'Unknown Deal',
'value' => $amount,
'won' => $isWon,
'closed' => $isWon || $isLost,
'stage' => [
'id' => $stage?->getUuid() ?? '',
'name' => $stage?->getName() ?? '',
],
];
if ($recordType) {
$record += [
'recordType' => [
'id' => $recordType->id_string,
'name' => $recordType->name,
],
];
}
if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
}
/**
* @inheritdoc
*/
public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array
{
$data = [];
switch ($objectType) {
case 'contact':
$hsObject = 'contact';
break;
case 'account':
$hsObject = 'company';
break;
default:
// This is a hack to prioritise and override a contact/company with a deal.
if ($opportunityId) {
$hsObject = 'deal';
$objectId = $opportunityId;
} else {
throw new InvalidArgumentException('Object type not supported.');
}
}
$engagementTypes = ['meetings', 'tasks'];
foreach ($engagementTypes as $engagementType) {
$payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);
$this->logger->info('[HubSpot] CRM Search requested', [
'request' => $payload,
]);
$engagements = $this->client->getPaginatedData($payload, $engagementType);
foreach ($engagements['results'] as $engagement) {
if ($engagementType == 'meetings') {
$title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';
} elseif ($engagementType == 'tasks') {
$title = $engagement['properties']['hs_task_subject'];
} else {
$title = 'Scheduled meeting';
}
$data[] = [
'crmId' => $engagement['id'],
'subject' => $title,
'due' => $engagement['properties']['hs_timestamp'],
'type' => $engagement['properties']['hs_activity_type'] ?? null,
];
}
}
usort($data, function ($item1, $item2) {
return $item2['due'] <=> $item1['due'];
});
return $data;
}
/**
* Try to find CRM Objects using email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchExactlyByEmail(string $email, ?int $userId = null): ?array
{
$contactProperties = [
'email',
// 'firstname',
// 'lastname',
// 'country',
// 'phone',
// 'mobilephone',
// 'jobtitle',
// 'hubspot_owner_id',
// 'associatedcompanyid',
// 'photo',
];
$contact = null;
$account = null;
try {
$hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);
return null;
if ($hsContact) {
$contact = $this->importContact($hsContact);
$account = $contact->account;
}
$data = $this->convertCrmData($contact, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
} catch (BadRequest $e) {
$this->logger->warning('[HubSpot] Search failed', [
'team_id' => $this->team->getId(),
'search_identifier' => $email,
'reason' => $e->getMessage(),
]);
}
return null;
}
public function getDomain(string $email): ?string
{
return $this->getDomainFromEmail($email);
}
/**
* Try to find CRM objects using domain name of the email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByDomain(string $domain, ?int $userId = null): ?array
{
$companyName = $domain;
// Try to find a company matching their email domain.
$companyProperties = [
'country',
'phone',
'name',
'hs_avatar_filemanager_key',
'industry',
'hubspot_owner_id',
'domain',
];
try {
$hsAccounts = $this->client
->getInstance()
->companies()
->searchByDomain($companyName, $companyProperties);
} catch (Throwable $e) {
$this->logger->info('[HubSpot] Search failed', [
'error' => $e->getMessage(),
'domain' => $domain,
]);
return null;
}
$account = null;
// If there are multiple accounts, don't guess, we'll ask later.
if (\count($hsAccounts->data->results) === 1) {
// Persist this remote object.
$account = $this->syncAccount($hsAccounts->data->results[0]->companyId);
}
$data = $this->convertCrmData(null, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
}
/**
* @return array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array
{
$countryCode = null;
if ($contact && $contact->country_code) {
$countryCode = $contact->country_code;
} elseif ($account && $account->country_code) {
$countryCode = $account->country_code;
}
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact ? $contact->crm_provider_id : null,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
// If there are multiple opportunities, don't guess, we'll ask later.
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
protected function getCacheKey(string $object, ?int $userId = null): ?string
{
$key = $this->team->getId() . $object;
$keySuffix = $this->getOwnerKeySuffix($userId);
return $key . $keySuffix;
}
private function getOwnerKeySuffix(?int $userId = null): string
{
return $userId === null ? '' : (string) $userId;
}
/**
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
*}
*/
public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array
{
if (str_contains($phone, '**')) {
return null;
}
// trim all whitespaces if present so the lookup doesn't fail
$phone = str_replace(' ', '', $phone);
// Check if the user is internal.
if ($this->isPhoneNumberOfTeamMember($phone)) {
return null;
}
$response = $this->searchForPhoneNumber($phone);
if (empty($response)) {
return null;
}
// This would ideally importContact instead but the response type differs.
$contact = $this->findAndSyncContact($response['results'][0]['id']);
if (! $contact instanceof Contact) {
return null;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account?->crm_provider_id,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
try {
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
} catch (Exception $e) {
$this->logger->debug('[HubSpot] Opportunity failed to sync.', [
'reason' => $e->getMessage(),
]);
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
private function isPhoneNumberOfTeamMember(string $phone): bool
{
$teamRepository = app(TeamRepository::class);
$user = $teamRepository->findTeamMemberByPhone($this->team, $phone);
if ($user instanceof User) {
return true;
}
return false;
}
private function findAndSyncContact(string $crmId): ?Contact
{
try {
return $this->syncContact($crmId);
} catch (Exception $exception) {
$this->logger->info('[HubSpot] Phone match failed', [
'reason' => $exception->getMessage(),
]);
return null;
}
}
private function hasResults(array $response): bool
{
return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;
}
private function searchForPhoneNumber(string $phone): array
{
// Normalizes the provided phone number for the API search.
$normalizedPhone = $this->normalizePhoneNumber($phone);
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);
$this->logger->info('[HubSpot] Phone match search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);
if (! $this->hasResults($response)) {
$nationalPhone = preg_replace('/\D/', '', phone_national(null, $phone));
$payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);
$this->logger->info('[HubSpot] Phone match national number search triggered', [
'phone' => $phone,
'nationalPhone' => $nationalPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
if (! $this->hasResults($response)) {
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);
$this->logger->info('[HubSpot] Phone match alternative search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
return $this->hasResults($response) ? $response : [];
}
private function handlePhoneSearchRequest(string $phone, array $payload): array
{
$endpoint = '[URL_WITH_CREDENTIALS] null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByName(string $name, ?int $userId = null): ?array
{
// Don't waste time searching for single character strings.
if (\strlen($name) <= 1) {
return null;
}
$cacheKey = $this->getCacheKey($name, $userId);
$result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {
$payload = $this->payloadBuilder->generateSearchContactsByNamePayload(
$name,
$this->getContactFields()
);
$hsContacts = $this->client->getPaginatedData($payload, 'contact');
if (empty($hsContacts['results'])) {
return false;
}
$contact = $this->importContact($hsContacts['results'][0]);
if ($contact === null) {
return false;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
});
return is_array($result) ? $result : null;
}
private function convertActivityAssociations(Activity $activity): array
{
return [
'contactIds' => $this->getParticipantsIds($activity),
'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],
'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],
'ownerIds' => [],
];
}
private function getParticipantsIds(Activity $activity): array
{
$attendees = [];
$participantRepository = app(ParticipantRepository::class);
$participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);
foreach ($participants as $participant) {
if ($participant->user_id || $participant->isCoach()) {
continue;
}
$contact = $participant->contact()->first();
if ($contact && $contact->crm_provider_id) {
$attendees[] = $contact->crm_provider_id;
} else {
if (! empty($participant->name)) {
$attendeeData = $this->fetchMissingAttendeeInfo($participant);
}
if (! empty($attendeeData['id'])) {
$attendees[] = $attendeeData['id'];
}
}
}
if ($activity->hasContact()) {
$attendees[] = $activity->contact->crm_provider_id;
}
return array_unique($attendees);
}
private function fetchMissingAttendeeInfo(Participant $participant): array
{
// Check if we need to look inside an account context.
$activity = $participant->getActivity();
$companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;
// First check the local data.
/** @var Contact[] $contacts */
$contacts = $this->team->contacts()
->with('account')
->where('name', $participant->name)
->whereNotNull('email')
->get();
foreach ($contacts as $contact) {
// If we have a company in scope, check the contact is associated to it.
if (
$companyId !== null
&& ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)
) {
continue;
}
return [
'id' => $contact->crm_provider_id,
'email' => $contact->email,
];
}
$payload = $this->generateNameSearchPayload($participant->name, 0, 20);
try {
$response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);
// TODO add some logic to choose the most suitable contact if multiple
foreach ($response['results'] as $object) {
$properties = $object['properties'];
if (empty($object['properties']) === false) {
// Check the company matches the contact.
// Todo: Move this check inside the API search.
if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {
continue;
}
return [
'id' => $object['id'],
'email' => $properties['email'],
];
}
}
} catch (Exception $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [
'teamId' => $this->team->id_string,
'request' => $payload,
'reason' => $e->getMessage(),
]);
}
return [];
}
/**
* Store transcripts as note engagement.
*
* @throws Exception
*/
public function createTranscriptNotes(Activity $activity): void
{
// For HS no need to...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3925
|
142
|
0
|
2026-05-07T12:51:06.159944+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158266159_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring start {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring end {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
[2026-05-07 12:37:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e","trace_id":"d35331c8-5bc2-453e-a064-52c939ade38b"}
[2026-05-07 12:37:19] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e","trace_id":"d35331c8-5bc2-453e-a064-52c939ade38b"}
[2026-05-07 12:37:19] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e","trace_id":"d35331c8-5bc2-453e-a064-52c939ade38b"}
[2026-05-07 12:37:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e","trace_id":"d35331c8-5bc2-453e-a064-52c939ade38b"}
[2026-05-07 12:37:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:27] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:27] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:29] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"79fe2955-ef22-4de3-[CREDIT_CARD]","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a21b56c6-1fca-4789-b9bc-12c4905d551a","trace_id":"4c26a3d4-811a-43b1-9a03-b6fde0596cd7"}
[2026-05-07 12:37:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a21b56c6-1fca-4789-b9bc-12c4905d551a","trace_id":"4c26a3d4-811a-43b1-9a03-b6fde0596cd7"}
[2026-05-07 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c054e185-ff83-4fc9-832d-8602f0d9392d","trace_id":"a20d7cbc-230b-41e9-b319-64ed6115cdb3"}
[2026-05-07 12:38:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c054e185-ff83-4fc9-832d-8602f0d9392d","trace_id":"a20d7cbc-230b-41e9-b319-64ed6115cdb3"}
[2026-05-07 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c054e185-ff83-4fc9-832d-8602f0d9392d","trace_id":"a20d7cbc-230b-41e9-b319-64ed6115cdb3"}
[2026-05-07 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6172b92e-3c23-4493-bf87-131b1d0e9d33","trace_id":"e0e01543-f43e-414a-a235-c33102540da5"}
[2026-05-07 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6172b92e-3c23-4493-bf87-131b1d0e9d33","trace_id":"e0e01543-f43e-414a-a235-c33102540da5"}
[2026-05-07 12:38:15] local.NOTICE: Monitoring start {"correlation_id":"e43d78fe-c6b7-4ab6-b396-28ecf2d1d0fe","trace_id":"df8a8111-a9a3-49b5-a807-fabc23ed3f0d"}
[2026-05-07 12:38:15] local.NOTICE: Monitoring end {"correlation_id":"e43d78fe-c6b7-4ab6-b396-28ecf2d1d0fe","trace_id":"df8a8111-a9a3-49b5-a807-fabc23ed3f0d"}
[2026-05-07 12:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"94007d53-5954-4a9c-8da5-6e58687f1b66","trace_id":"7f743245-aef5-49c8-9f19-04a44ee6c448"}
[2026-05-07 12:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"94007d53-5954-4a9c-8da5-6e58687f1b66","trace_id":"7f743245-aef5-49c8-9f19-04a44ee6c448"}
[2026-05-07 12:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"14984be8-a3d7-461a-b39b-0bde6a871e79","trace_id":"626894d4-f4d5-498c-96b1-896af4e3481f"}
[2026-05-07 12:38:21] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"14984be8-a3d7-461a-b39b-0bde6a871e79","trace_id":"626894d4-f4d5-498c-96b1-896af4e3481f"}
[2026-05-07 12:38:21] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"14984be8-a3d7-461a-b39b-0bde6a871e79","trace_id":"626894d4-f4d5-498c-96b1-896af4e3481f"}
[2026-05-07 12:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"14984be8-a3d7-461a-b39b-0bde6a871e79","trace_id":"626894d4-f4d5-498c-96b1-896af4e3481f"}
[2026-05-07 12:38:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b32f0529-b2c9-43d9-bef0-fe44108dd6f2","trace_id":"cca6d28b-af2c-4c5e-ab33-9fe235c1b593"}
[2026-05-07 12:38:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:36:00, 2026-05-07 12:38:00] {"correlation_id":"b32f0529-b2c9-43d9-bef0-fe44108dd6f2","trace_id":"cca6d28b-af2c-4c5e-ab33-9fe235c1b593"}
[2026-05-07 12:38:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:36:00, 2026-05-07 12:38:00] {"correlation_id":"b32f0529-b2c9-43d9-bef0-fe44108dd6f2","trace_id":"cca6d28b-af2c-4c5e-ab33-9fe235c1b593"}
[2026-05-07 12:38:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b32f0529-b2c9-43d9-bef0-fe44108dd6f2","trace_id":"cca6d28b-af2c-4c5e-ab33-9fe235c1b593"}
[2026-05-07 12:38:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1e62e4ef-74ad-4e02-95fa-8a5b722e28b8","trace_id":"15346c2e-f65a-4521-933c-a89877e4ed99"}
[2026-05-07 12:38:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1e62e4ef-74ad-4e02-95fa-8a5b722e28b8","trace_id":"15346c2e-f65a-4521-933c-a89877e4ed99"}
[2026-05-07 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd5e2503-0d28-4fe8-ad71-2060a7016293","trace_id":"d6686dd2-3381-45a7-be10-d7788fb08bad"}
[2026-05-07 12:39:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"bd5e2503-0d28-4fe8-ad71-2060a7016293","trace_id":"d6686dd2-3381-45a7-be10-d7788fb08bad"}
[2026-05-07 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd5e2503-0d28-4fe8-ad71-2060a7016293","trace_id":"d6686dd2-3381-45a7-be10-d7788fb08bad"}
[2026-05-07 12:39:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7d3a98b5-8219-4da1-80df-c05cbf309169","trace_id":"d63db36a-dc2d-4152-aa80-0f7ba186c38a"}
[2026-05-07 12:39:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7d3a98b5-8219-4da1-80df-c05cbf309169","trace_id":"d63db36a-dc2d-4152-aa80-0f7ba186c38a"}
[2026-05-07 12:39:09] local.NOTICE: Monitoring start {"correlation_id":"2e6a9b0a-8564-413b-b04f-0befbbdc8f14","trace_id":"f97569de-cfe3-4fd6-aee6-50e2093b7674"}
[2026-05-07 12:39:09] local.NOTICE: Monitoring end {"correlation_id":"2e6a9b0a-8564-413b-b04f-0befbbdc8f14","trace_id":"f97569de-cfe3-4fd6-aee6-50e2093b7674"}
[2026-05-07 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"73e337f9-6075-4b7e-8e2e-a340abc0e137","trace_id":"8f221a8a-5887-4f5b-8aea-54ba1ae53809"}
[2026-05-07 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"73e337f9-6075-4b7e-8e2e-a340abc0e137","trace_id":"8f221a8a-5887-4f5b-8aea-54ba1ae53809"}
[2026-05-07 12:39:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"84514a0d-ab6a-40cd-96be-55e4059cfd35","trace_id":"5724849b-b6f2-4395-ba0d-54777bd608f7"}
[2026-05-07 12:39:15] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"84514a0d-ab6a-40cd-96be-55e4059cfd35","trace_id":"5724849b-b6f2-4395-ba0d-54777bd608f7"}
[2026-05-07 12:39:15] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"84514a0d-ab6a-40cd-96be-55e4059cfd35","trace_id":"5724849b-b6f2-4395-ba0d-54777bd608f7"}
[2026-05-07 12:39:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"84514a0d-ab6a-40cd-96be-55e4059cfd35","trace_id":"5724849b-b6f2-4395-ba0d-54777bd608f7"}
[2026-05-07 12:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:19] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"9d92ba6b-b7ea-4e3f-8cd5-9adeed6e7bda","trace_id":"c7e5d414-5ff5-435d-a021-b25f67adb1ba"}
[2026-05-07 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9f74277c-9272-42d5-9e88-e0b6d5450022","trace_id":"676f7aa9-a79d-42cd-bd4b-117110da4d86"}
[2026-05-07 12:40:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9f74277c-9272-42d5-9e88-e0b6d5450022","trace_id":"676f7aa9-a79d-42cd-bd4b-117110da4d86"}
[2026-05-07 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9f74277c-9272-42d5-9e88-e0b6d5450022","trace_id":"676f7aa9-a79d-42cd-bd4b-117110da4d86"}
[2026-05-07 12:40:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"796b8264-1d37-4084-b590-f9fdffb4da24","trace_id":"fabb4fa8-9220-43da-96a3-e73fd941dfa1"}
[2026-05-07 12:40:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"796b8264-1d37-4084-b590-f9fdffb4da24","trace_id":"fabb4fa8-9220-43da-96a3-e73fd941dfa1"}
[2026-05-07 12:40:10] local.NOTICE: Monitoring start {"correlation_id":"3b74e5a1-0805-42a0-83f2-0e13200ca6c4","trace_id":"122d66ab-5d87-4f14-ae9a-ac9299bc4700"}
[2026-05-07 12:40:10] local.NOTICE: Monitoring end {"correlation_id":"3b74e5a1-0805-42a0-83f2-0e13200ca6c4","trace_id":"122d66ab-5d87-4f14-ae9a-ac9299bc4700"}
[2026-05-07 12:40:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3d80b51a-a6e3-4a94-9e12-39afa8e4de8f","trace_id":"afb8c319-9eca-478a-a8e0-7ebcc7632de2"}
[2026-05-07 12:40:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3d80b51a-a6e3-4a94-9e12-39afa8e4de8f","trace_id":"afb8c319-9eca-478a-a8e0-7ebcc7632de2"}
[2026-05-07 12:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a7dfa315-507e-46f8-b698-027b663f854c","trace_id":"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9"}
[2026-05-07 12:40:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"a7dfa315-507e-46f8-b698-027b663f854c","trace_id":"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9"}
[2026-05-07 12:40:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"a7dfa315-507e-46f8-b698-027b663f854c","trace_id":"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9"}
[2026-05-07 12:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a7dfa315-507e-46f8-b698-027b663f854c","trace_id":"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9"}
[2026-05-07 12:40:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"14f00b59-9628-4c7d-840a-a00ae1c744db","trace_id":"706e6e50-8804-4d0b-a625-3948c0c5329e"}
[2026-05-07 12:40:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:38:00, 2026-05-07 12:40:00] {"correlation_id":"14f00b59-9628-4c7d-840a-a00ae1c744db","trace_id":"706e6e50-8804-4d0b-a625-3948c0c5329e"}
[2026-05-07 12:40:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:38:00, 2026-05-07 12:40:00] {"correlation_id":"14f00b59-9628-4c7d-840a-a00ae1c744db","trace_id":"706e6e50-8804-4d0b-a625-3948c0c5329e"}
[2026-05-07 12:40:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"14f00b59-9628-4c7d-840a-a00ae1c744db","trace_id":"706e6e50-8804-4d0b-a625-3948c0c5329e"}
[2026-05-07 12:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8e67aed4-0e83-4b6b-bda7-663bcd1f2bf8","trace_id":"b330ee8a-ccb6-45e5-a652-16c11f647577"}
[2026-05-07 12:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8e67aed4-0e83-4b6b-bda7-663bcd1f2bf8","trace_id":"b330ee8a-ccb6-45e5-a652-16c11f647577"}
[2026-05-07 12:40:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8dc58840-937d-4b85-9ac2-0463b7dae8f6","trace_id":"3b5cc7db-e41e-451d-be96-3664afc516fc"}
[2026-05-07 12:40:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8dc58840-937d-4b85-9ac2-0463b7dae8f6","trace_id":"3b5cc7db-e41e-451d-be96-3664afc516fc"}
[2026-05-07 12:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f3973721-eb91-4c0e-a3d6-a5800098af5f","trace_id":"71dd8a58-dbb6-48a6-ae90-83c3be381367"}
[2026-05-07 12:40:23] local.INFO: Running pre-meeting notification command {"correlation_id":"f3973721-eb91-4c0e-a3d6-a5800098af5f","trace_id":"71dd8a58-dbb6-48a6-ae90-83c3be381367"}
[2026-05-07 12:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f3973721-eb91-4c0e-a3d6-a5800098af5f","trace_id":"71dd8a58-dbb6-48a6-ae90-83c3be381367"}
[2026-05-07 12:40:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"666067c7-495e-4bf7-be29-c2b53c94c92c","trace_id":"29de0dbf-0458-4301-8142-974e66c69416"}
[2026-05-07 12:40:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:30:00, 2026-05-07 12:35:00] {"correlation_id":"666067c7-495e-4bf7-be29-c2b53c94c92c","trace_id":"29de0dbf-0458-4301-8142-974e66c69416"}
[2026-05-07 12:40:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:30:00, 2026-05-07 12:35:00] {"correlation_id":"666067c7-495e-4bf7-be29-c2b53c94c92c","trace_id":"29de0dbf-0458-4301-8142-974e66c69416"}
[2026-05-07 12:40:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"666067c7-495e-4bf7-be29-c2b53c94c92c","trace_id":"29de0dbf-0458-4301-8142-974e66c69416"}
[2026-05-07 12:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa35f3db-4219-4d4e-9904-4c9a6b02af12","trace_id":"485dd04b-b4d8-438a-b9a1-a663d11a88f8"}
[2026-05-07 12:40:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:35","to":"12:40"} {"correlation_id":"fa35f3db-4219-4d4e-9904-4c9a6b02af12","trace_id":"485dd04b-b4d8-438a-b9a1-a663d11a88f8"}
[2026-05-07 12:40:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:30","to":"02:35"} {"correlation_id":"fa35f3db-4219-4d4e-9904-4c9a6b02af12","trace_id":"485dd04b-b4d8-438a-b9a1-a663d11a88f8"}
[2026-05-07 12:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa35f3db-4219-4d4e-9904-4c9a6b02af12","trace_id":"485dd04b-b4d8-438a-b9a1-a663d11a88f8"}
[2026-05-07 12:40:32] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8ec62eba-0628-4e8c-8298-97c0e88ede05","trace_id":"f267a1dc-7170-409a-9528-f1b9f8f84943"}
[2026-05-07 12:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cae61022-3dc8-41b5-998d-b66b554012d9","trace_id":"33328699-8e81-4d65-9c26-bed20557513b"}
[2026-05-07 12:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cae61022-3dc8-41b5-998d-b66b554012d9","trace_id":"33328699-8e81-4d65-9c26-bed20557513b"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:42:43.374545Z"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8ec62eba-0628-4e8c-8298-97c0e88ede05","trace_id":"f267a1dc-7170-409a-9528-f1b9f8f84943"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:47] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d36fe1e1-6591-4345-adac-d193747b67da","trace_id":"59431cca-4062-48fe-9879-4599646c00b0"}
[2026-05-07 12:40:47] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d36fe1e1-6591-4345-adac-d193747b67da","trace_id":"59431cca-4062-48fe-9879-4599646c00b0"}
[2026-05-07 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"60d70dec-5cff-4b5d-b8c7-765fede49b1c","trace_id":"a9567026-0293-48c7-9e56-75832ac488ee"}
[2026-05-07 12:40:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"60d70dec-5cff-4b5d-b8c7-765fede49b1c","trace_id":"a9567026-0293-48c7-9e56-75832ac488ee"}
[2026-05-07 12:40:53] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:53] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:54] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:41:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"887bea2f-c517-4731-a288-31ec685e8aeb","trace_id":"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b"}
[2026-05-07 12:41:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"887bea2f-c517-4731-a288-31ec685e8aeb","trace_id":"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b"}
[2026-05-07 12:41:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"887bea2f-c517-4731-a288-31ec685e8aeb","trace_id":"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b"}
[2026-05-07 12:41:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"774cbbc3-b2b1-4425-ad60-108ba21929d8","trace_id":"4b36526a-a9f6-49b5-b21e-71a53fe14cfa"}
[2026-05-07 12:41:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"774cbbc3-b2b1-4425-ad60-108ba21929d8","trace_id":"4b36526a-a9f6-49b5-b21e-71a53fe14cfa"}
[2026-05-07 12:41:09] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:41:09] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:41:09] local.NOTICE: Monitoring start {"correlation_id":"3923d9ae-2861-49f1-9a94-cc17a36cbb37","trace_id":"34eeb3fc-9029-40e6-8db4-6bacc5c6d395"}
[2026-05-07 12:41:09] local.NOTICE: Monitoring end {"correlation_id":"3923d9ae-2861-49f1-9a94-cc17a36cbb37","trace_id":"34eeb3fc-9029-40e6-8db4-6bacc5c6d395"}
[2026-05-07 12:41:09] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3f50bd1-d21c-4d8b-8a79-95ec749af7f4","trace_id":"97ee560d-4c4c-4d12-9a00-1edb4740a28e"}
[2026-05-07 12:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3f50bd1-d21c-4d8b-8a79-95ec749af7f4","trace_id":"97ee560d-4c4c-4d12-9a00-1edb4740a28e"}
[2026-05-07 12:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b6de13ab-9147-4844-93c1-88f0a483374e","trace_id":"712e5f76-6189-4e42-bdad-7821d38e99e8"}
[2026-05-07 12:41:13] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b6de13ab-9147-4844-93c1-88f0a483374e","trace_id":"712e5f76-6189-4e42-bdad-7821d38e99e8"}
[2026-05-07 12:41:13] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b6de13ab-9147-4844-93c1-88f0a483374e","trace_id":"712e5f76-6189-4e42-bdad-7821d38e99e8"}
[2026-05-07 12:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b6de13ab-9147-4844-93c1-88f0a483374e","trace_id":"712e5f76-6189-4e42-bdad-7821d38e99e8"}
[2026-05-07 12:41:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ef1fde0f-e6e3-4ecd-809f-fa23c413e47e","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ef1fde0f-e6e3-4ecd-809f-fa23c413e47e","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24642552,"real_usage":65011712,"pid":32723} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.91,"average_seconds_per_request":0.91} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":921.9} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":967.13,"usage":24765784,"real_usage":65011712,"pid":32723} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24743712,"real_usage":65011712,"pid":32723} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":23.28,"usage":24881008,"real_usage":65011712,"pid":32723,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24919448,"real_usage":65011712,"pid":32723} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":12.19,"usage":24881104,"real_usage":65011712,"pid":32723,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24919472,"real_usage":65011712,"pid":32723} {"correlation_id":"bd22dbfc-2726-4eef-a4fc-4b796f0b5162","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"bd22dbfc-2726-4eef-a4fc-4b796f0b5162","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"bd22dbfc-2726-4eef-a4fc-4b796f0b5162","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"bd22dbfc-2726-4eef-a4fc-4b796f0b5162","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.68484044,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.69348407,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"bounds":{"left":0.7044548,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"bounds":{"left":0.7130984,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"bounds":{"left":0.72174203,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"bounds":{"left":0.73038566,"top":0.07821229,"width":0.032247342,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"bounds":{"left":0.76263297,"top":0.07821229,"width":0.023271276,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"bounds":{"left":0.7859042,"top":0.07821229,"width":0.022938829,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"bounds":{"left":0.8088431,"top":0.08220271,"width":0.0019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring start {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring end {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}\n[2026-05-07 12:37:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e\",\"trace_id\":\"d35331c8-5bc2-453e-a064-52c939ade38b\"}\n[2026-05-07 12:37:19] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e\",\"trace_id\":\"d35331c8-5bc2-453e-a064-52c939ade38b\"}\n[2026-05-07 12:37:19] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e\",\"trace_id\":\"d35331c8-5bc2-453e-a064-52c939ade38b\"}\n[2026-05-07 12:37:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e\",\"trace_id\":\"d35331c8-5bc2-453e-a064-52c939ade38b\"}\n[2026-05-07 12:37:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:29] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"79fe2955-ef22-4de3-9520-070973781875\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a21b56c6-1fca-4789-b9bc-12c4905d551a\",\"trace_id\":\"4c26a3d4-811a-43b1-9a03-b6fde0596cd7\"}\n[2026-05-07 12:37:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a21b56c6-1fca-4789-b9bc-12c4905d551a\",\"trace_id\":\"4c26a3d4-811a-43b1-9a03-b6fde0596cd7\"}\n[2026-05-07 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c054e185-ff83-4fc9-832d-8602f0d9392d\",\"trace_id\":\"a20d7cbc-230b-41e9-b319-64ed6115cdb3\"}\n[2026-05-07 12:38:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c054e185-ff83-4fc9-832d-8602f0d9392d\",\"trace_id\":\"a20d7cbc-230b-41e9-b319-64ed6115cdb3\"}\n[2026-05-07 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c054e185-ff83-4fc9-832d-8602f0d9392d\",\"trace_id\":\"a20d7cbc-230b-41e9-b319-64ed6115cdb3\"}\n[2026-05-07 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6172b92e-3c23-4493-bf87-131b1d0e9d33\",\"trace_id\":\"e0e01543-f43e-414a-a235-c33102540da5\"}\n[2026-05-07 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6172b92e-3c23-4493-bf87-131b1d0e9d33\",\"trace_id\":\"e0e01543-f43e-414a-a235-c33102540da5\"}\n[2026-05-07 12:38:15] local.NOTICE: Monitoring start {\"correlation_id\":\"e43d78fe-c6b7-4ab6-b396-28ecf2d1d0fe\",\"trace_id\":\"df8a8111-a9a3-49b5-a807-fabc23ed3f0d\"}\n[2026-05-07 12:38:15] local.NOTICE: Monitoring end {\"correlation_id\":\"e43d78fe-c6b7-4ab6-b396-28ecf2d1d0fe\",\"trace_id\":\"df8a8111-a9a3-49b5-a807-fabc23ed3f0d\"}\n[2026-05-07 12:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"94007d53-5954-4a9c-8da5-6e58687f1b66\",\"trace_id\":\"7f743245-aef5-49c8-9f19-04a44ee6c448\"}\n[2026-05-07 12:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"94007d53-5954-4a9c-8da5-6e58687f1b66\",\"trace_id\":\"7f743245-aef5-49c8-9f19-04a44ee6c448\"}\n[2026-05-07 12:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14984be8-a3d7-461a-b39b-0bde6a871e79\",\"trace_id\":\"626894d4-f4d5-498c-96b1-896af4e3481f\"}\n[2026-05-07 12:38:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"14984be8-a3d7-461a-b39b-0bde6a871e79\",\"trace_id\":\"626894d4-f4d5-498c-96b1-896af4e3481f\"}\n[2026-05-07 12:38:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"14984be8-a3d7-461a-b39b-0bde6a871e79\",\"trace_id\":\"626894d4-f4d5-498c-96b1-896af4e3481f\"}\n[2026-05-07 12:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14984be8-a3d7-461a-b39b-0bde6a871e79\",\"trace_id\":\"626894d4-f4d5-498c-96b1-896af4e3481f\"}\n[2026-05-07 12:38:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b32f0529-b2c9-43d9-bef0-fe44108dd6f2\",\"trace_id\":\"cca6d28b-af2c-4c5e-ab33-9fe235c1b593\"}\n[2026-05-07 12:38:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:36:00, 2026-05-07 12:38:00] {\"correlation_id\":\"b32f0529-b2c9-43d9-bef0-fe44108dd6f2\",\"trace_id\":\"cca6d28b-af2c-4c5e-ab33-9fe235c1b593\"}\n[2026-05-07 12:38:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:36:00, 2026-05-07 12:38:00] {\"correlation_id\":\"b32f0529-b2c9-43d9-bef0-fe44108dd6f2\",\"trace_id\":\"cca6d28b-af2c-4c5e-ab33-9fe235c1b593\"}\n[2026-05-07 12:38:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b32f0529-b2c9-43d9-bef0-fe44108dd6f2\",\"trace_id\":\"cca6d28b-af2c-4c5e-ab33-9fe235c1b593\"}\n[2026-05-07 12:38:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1e62e4ef-74ad-4e02-95fa-8a5b722e28b8\",\"trace_id\":\"15346c2e-f65a-4521-933c-a89877e4ed99\"}\n[2026-05-07 12:38:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1e62e4ef-74ad-4e02-95fa-8a5b722e28b8\",\"trace_id\":\"15346c2e-f65a-4521-933c-a89877e4ed99\"}\n[2026-05-07 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd5e2503-0d28-4fe8-ad71-2060a7016293\",\"trace_id\":\"d6686dd2-3381-45a7-be10-d7788fb08bad\"}\n[2026-05-07 12:39:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"bd5e2503-0d28-4fe8-ad71-2060a7016293\",\"trace_id\":\"d6686dd2-3381-45a7-be10-d7788fb08bad\"}\n[2026-05-07 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd5e2503-0d28-4fe8-ad71-2060a7016293\",\"trace_id\":\"d6686dd2-3381-45a7-be10-d7788fb08bad\"}\n[2026-05-07 12:39:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7d3a98b5-8219-4da1-80df-c05cbf309169\",\"trace_id\":\"d63db36a-dc2d-4152-aa80-0f7ba186c38a\"}\n[2026-05-07 12:39:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7d3a98b5-8219-4da1-80df-c05cbf309169\",\"trace_id\":\"d63db36a-dc2d-4152-aa80-0f7ba186c38a\"}\n[2026-05-07 12:39:09] local.NOTICE: Monitoring start {\"correlation_id\":\"2e6a9b0a-8564-413b-b04f-0befbbdc8f14\",\"trace_id\":\"f97569de-cfe3-4fd6-aee6-50e2093b7674\"}\n[2026-05-07 12:39:09] local.NOTICE: Monitoring end {\"correlation_id\":\"2e6a9b0a-8564-413b-b04f-0befbbdc8f14\",\"trace_id\":\"f97569de-cfe3-4fd6-aee6-50e2093b7674\"}\n[2026-05-07 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73e337f9-6075-4b7e-8e2e-a340abc0e137\",\"trace_id\":\"8f221a8a-5887-4f5b-8aea-54ba1ae53809\"}\n[2026-05-07 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73e337f9-6075-4b7e-8e2e-a340abc0e137\",\"trace_id\":\"8f221a8a-5887-4f5b-8aea-54ba1ae53809\"}\n[2026-05-07 12:39:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"84514a0d-ab6a-40cd-96be-55e4059cfd35\",\"trace_id\":\"5724849b-b6f2-4395-ba0d-54777bd608f7\"}\n[2026-05-07 12:39:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"84514a0d-ab6a-40cd-96be-55e4059cfd35\",\"trace_id\":\"5724849b-b6f2-4395-ba0d-54777bd608f7\"}\n[2026-05-07 12:39:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"84514a0d-ab6a-40cd-96be-55e4059cfd35\",\"trace_id\":\"5724849b-b6f2-4395-ba0d-54777bd608f7\"}\n[2026-05-07 12:39:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"84514a0d-ab6a-40cd-96be-55e4059cfd35\",\"trace_id\":\"5724849b-b6f2-4395-ba0d-54777bd608f7\"}\n[2026-05-07 12:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:19] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"9d92ba6b-b7ea-4e3f-8cd5-9adeed6e7bda\",\"trace_id\":\"c7e5d414-5ff5-435d-a021-b25f67adb1ba\"}\n[2026-05-07 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9f74277c-9272-42d5-9e88-e0b6d5450022\",\"trace_id\":\"676f7aa9-a79d-42cd-bd4b-117110da4d86\"}\n[2026-05-07 12:40:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9f74277c-9272-42d5-9e88-e0b6d5450022\",\"trace_id\":\"676f7aa9-a79d-42cd-bd4b-117110da4d86\"}\n[2026-05-07 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9f74277c-9272-42d5-9e88-e0b6d5450022\",\"trace_id\":\"676f7aa9-a79d-42cd-bd4b-117110da4d86\"}\n[2026-05-07 12:40:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"796b8264-1d37-4084-b590-f9fdffb4da24\",\"trace_id\":\"fabb4fa8-9220-43da-96a3-e73fd941dfa1\"}\n[2026-05-07 12:40:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"796b8264-1d37-4084-b590-f9fdffb4da24\",\"trace_id\":\"fabb4fa8-9220-43da-96a3-e73fd941dfa1\"}\n[2026-05-07 12:40:10] local.NOTICE: Monitoring start {\"correlation_id\":\"3b74e5a1-0805-42a0-83f2-0e13200ca6c4\",\"trace_id\":\"122d66ab-5d87-4f14-ae9a-ac9299bc4700\"}\n[2026-05-07 12:40:10] local.NOTICE: Monitoring end {\"correlation_id\":\"3b74e5a1-0805-42a0-83f2-0e13200ca6c4\",\"trace_id\":\"122d66ab-5d87-4f14-ae9a-ac9299bc4700\"}\n[2026-05-07 12:40:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3d80b51a-a6e3-4a94-9e12-39afa8e4de8f\",\"trace_id\":\"afb8c319-9eca-478a-a8e0-7ebcc7632de2\"}\n[2026-05-07 12:40:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3d80b51a-a6e3-4a94-9e12-39afa8e4de8f\",\"trace_id\":\"afb8c319-9eca-478a-a8e0-7ebcc7632de2\"}\n[2026-05-07 12:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a7dfa315-507e-46f8-b698-027b663f854c\",\"trace_id\":\"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9\"}\n[2026-05-07 12:40:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a7dfa315-507e-46f8-b698-027b663f854c\",\"trace_id\":\"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9\"}\n[2026-05-07 12:40:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a7dfa315-507e-46f8-b698-027b663f854c\",\"trace_id\":\"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9\"}\n[2026-05-07 12:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a7dfa315-507e-46f8-b698-027b663f854c\",\"trace_id\":\"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9\"}\n[2026-05-07 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14f00b59-9628-4c7d-840a-a00ae1c744db\",\"trace_id\":\"706e6e50-8804-4d0b-a625-3948c0c5329e\"}\n[2026-05-07 12:40:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:38:00, 2026-05-07 12:40:00] {\"correlation_id\":\"14f00b59-9628-4c7d-840a-a00ae1c744db\",\"trace_id\":\"706e6e50-8804-4d0b-a625-3948c0c5329e\"}\n[2026-05-07 12:40:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:38:00, 2026-05-07 12:40:00] {\"correlation_id\":\"14f00b59-9628-4c7d-840a-a00ae1c744db\",\"trace_id\":\"706e6e50-8804-4d0b-a625-3948c0c5329e\"}\n[2026-05-07 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14f00b59-9628-4c7d-840a-a00ae1c744db\",\"trace_id\":\"706e6e50-8804-4d0b-a625-3948c0c5329e\"}\n[2026-05-07 12:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8e67aed4-0e83-4b6b-bda7-663bcd1f2bf8\",\"trace_id\":\"b330ee8a-ccb6-45e5-a652-16c11f647577\"}\n[2026-05-07 12:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8e67aed4-0e83-4b6b-bda7-663bcd1f2bf8\",\"trace_id\":\"b330ee8a-ccb6-45e5-a652-16c11f647577\"}\n[2026-05-07 12:40:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8dc58840-937d-4b85-9ac2-0463b7dae8f6\",\"trace_id\":\"3b5cc7db-e41e-451d-be96-3664afc516fc\"}\n[2026-05-07 12:40:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8dc58840-937d-4b85-9ac2-0463b7dae8f6\",\"trace_id\":\"3b5cc7db-e41e-451d-be96-3664afc516fc\"}\n[2026-05-07 12:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f3973721-eb91-4c0e-a3d6-a5800098af5f\",\"trace_id\":\"71dd8a58-dbb6-48a6-ae90-83c3be381367\"}\n[2026-05-07 12:40:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"f3973721-eb91-4c0e-a3d6-a5800098af5f\",\"trace_id\":\"71dd8a58-dbb6-48a6-ae90-83c3be381367\"}\n[2026-05-07 12:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f3973721-eb91-4c0e-a3d6-a5800098af5f\",\"trace_id\":\"71dd8a58-dbb6-48a6-ae90-83c3be381367\"}\n[2026-05-07 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"666067c7-495e-4bf7-be29-c2b53c94c92c\",\"trace_id\":\"29de0dbf-0458-4301-8142-974e66c69416\"}\n[2026-05-07 12:40:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:30:00, 2026-05-07 12:35:00] {\"correlation_id\":\"666067c7-495e-4bf7-be29-c2b53c94c92c\",\"trace_id\":\"29de0dbf-0458-4301-8142-974e66c69416\"}\n[2026-05-07 12:40:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:30:00, 2026-05-07 12:35:00] {\"correlation_id\":\"666067c7-495e-4bf7-be29-c2b53c94c92c\",\"trace_id\":\"29de0dbf-0458-4301-8142-974e66c69416\"}\n[2026-05-07 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"666067c7-495e-4bf7-be29-c2b53c94c92c\",\"trace_id\":\"29de0dbf-0458-4301-8142-974e66c69416\"}\n[2026-05-07 12:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa35f3db-4219-4d4e-9904-4c9a6b02af12\",\"trace_id\":\"485dd04b-b4d8-438a-b9a1-a663d11a88f8\"}\n[2026-05-07 12:40:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:35\",\"to\":\"12:40\"} {\"correlation_id\":\"fa35f3db-4219-4d4e-9904-4c9a6b02af12\",\"trace_id\":\"485dd04b-b4d8-438a-b9a1-a663d11a88f8\"}\n[2026-05-07 12:40:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:30\",\"to\":\"02:35\"} {\"correlation_id\":\"fa35f3db-4219-4d4e-9904-4c9a6b02af12\",\"trace_id\":\"485dd04b-b4d8-438a-b9a1-a663d11a88f8\"}\n[2026-05-07 12:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa35f3db-4219-4d4e-9904-4c9a6b02af12\",\"trace_id\":\"485dd04b-b4d8-438a-b9a1-a663d11a88f8\"}\n[2026-05-07 12:40:32] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ec62eba-0628-4e8c-8298-97c0e88ede05\",\"trace_id\":\"f267a1dc-7170-409a-9528-f1b9f8f84943\"}\n[2026-05-07 12:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cae61022-3dc8-41b5-998d-b66b554012d9\",\"trace_id\":\"33328699-8e81-4d65-9c26-bed20557513b\"}\n[2026-05-07 12:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cae61022-3dc8-41b5-998d-b66b554012d9\",\"trace_id\":\"33328699-8e81-4d65-9c26-bed20557513b\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:42:43.374545Z\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8ec62eba-0628-4e8c-8298-97c0e88ede05\",\"trace_id\":\"f267a1dc-7170-409a-9528-f1b9f8f84943\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d36fe1e1-6591-4345-adac-d193747b67da\",\"trace_id\":\"59431cca-4062-48fe-9879-4599646c00b0\"}\n[2026-05-07 12:40:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d36fe1e1-6591-4345-adac-d193747b67da\",\"trace_id\":\"59431cca-4062-48fe-9879-4599646c00b0\"}\n[2026-05-07 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"60d70dec-5cff-4b5d-b8c7-765fede49b1c\",\"trace_id\":\"a9567026-0293-48c7-9e56-75832ac488ee\"}\n[2026-05-07 12:40:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"60d70dec-5cff-4b5d-b8c7-765fede49b1c\",\"trace_id\":\"a9567026-0293-48c7-9e56-75832ac488ee\"}\n[2026-05-07 12:40:53] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:53] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:54] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"887bea2f-c517-4731-a288-31ec685e8aeb\",\"trace_id\":\"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b\"}\n[2026-05-07 12:41:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"887bea2f-c517-4731-a288-31ec685e8aeb\",\"trace_id\":\"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b\"}\n[2026-05-07 12:41:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"887bea2f-c517-4731-a288-31ec685e8aeb\",\"trace_id\":\"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b\"}\n[2026-05-07 12:41:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"774cbbc3-b2b1-4425-ad60-108ba21929d8\",\"trace_id\":\"4b36526a-a9f6-49b5-b21e-71a53fe14cfa\"}\n[2026-05-07 12:41:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"774cbbc3-b2b1-4425-ad60-108ba21929d8\",\"trace_id\":\"4b36526a-a9f6-49b5-b21e-71a53fe14cfa\"}\n[2026-05-07 12:41:09] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:09] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:09] local.NOTICE: Monitoring start {\"correlation_id\":\"3923d9ae-2861-49f1-9a94-cc17a36cbb37\",\"trace_id\":\"34eeb3fc-9029-40e6-8db4-6bacc5c6d395\"}\n[2026-05-07 12:41:09] local.NOTICE: Monitoring end {\"correlation_id\":\"3923d9ae-2861-49f1-9a94-cc17a36cbb37\",\"trace_id\":\"34eeb3fc-9029-40e6-8db4-6bacc5c6d395\"}\n[2026-05-07 12:41:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3f50bd1-d21c-4d8b-8a79-95ec749af7f4\",\"trace_id\":\"97ee560d-4c4c-4d12-9a00-1edb4740a28e\"}\n[2026-05-07 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3f50bd1-d21c-4d8b-8a79-95ec749af7f4\",\"trace_id\":\"97ee560d-4c4c-4d12-9a00-1edb4740a28e\"}\n[2026-05-07 12:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6de13ab-9147-4844-93c1-88f0a483374e\",\"trace_id\":\"712e5f76-6189-4e42-bdad-7821d38e99e8\"}\n[2026-05-07 12:41:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b6de13ab-9147-4844-93c1-88f0a483374e\",\"trace_id\":\"712e5f76-6189-4e42-bdad-7821d38e99e8\"}\n[2026-05-07 12:41:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b6de13ab-9147-4844-93c1-88f0a483374e\",\"trace_id\":\"712e5f76-6189-4e42-bdad-7821d38e99e8\"}\n[2026-05-07 12:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6de13ab-9147-4844-93c1-88f0a483374e\",\"trace_id\":\"712e5f76-6189-4e42-bdad-7821d38e99e8\"}\n[2026-05-07 12:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef1fde0f-e6e3-4ecd-809f-fa23c413e47e\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef1fde0f-e6e3-4ecd-809f-fa23c413e47e\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24642552,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.91,\"average_seconds_per_request\":0.91} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":921.9} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":967.13,\"usage\":24765784,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24743712,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":23.28,\"usage\":24881008,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24919448,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.19,\"usage\":24881104,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24919472,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":11.58,\"usage\":24882248,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":182.0,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:42:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"158f6f82-1803-435d-be52-9f6140495232\",\"trace_id\":\"040e2fc3-1836-44eb-8085-c394063f8cbe\"}\n[2026-05-07 12:42:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"158f6f82-1803-435d-be52-9f6140495232\",\"trace_id\":\"040e2fc3-1836-44eb-8085-c394063f8cbe\"}\n[2026-05-07 12:42:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"158f6f82-1803-435d-be52-9f6140495232\",\"trace_id\":\"040e2fc3-1836-44eb-8085-c394063f8cbe\"}\n[2026-05-07 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ae1e9744-d34d-4b87-b49b-8632d6c80877\",\"trace_id\":\"f860352b-abab-4621-816a-0dabbb99a147\"}\n[2026-05-07 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ae1e9744-d34d-4b87-b49b-8632d6c80877\",\"trace_id\":\"f860352b-abab-4621-816a-0dabbb99a147\"}\n[2026-05-07 12:42:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f59c65dd-b025-413c-aa53-9841f11fb7cc\",\"trace_id\":\"63969c40-fcb9-4604-ae95-24db3eb2a6dd\"}\n[2026-05-07 12:42:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f59c65dd-b025-413c-aa53-9841f11fb7cc\",\"trace_id\":\"63969c40-fcb9-4604-ae95-24db3eb2a6dd\"}\n[2026-05-07 12:42:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"90d066d1-282f-45cd-818e-3b76e25ab055\",\"trace_id\":\"8e3a9530-644f-43ce-b8e9-94b38d9bc816\"}\n[2026-05-07 12:42:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"90d066d1-282f-45cd-818e-3b76e25ab055\",\"trace_id\":\"8e3a9530-644f-43ce-b8e9-94b38d9bc816\"}\n[2026-05-07 12:42:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c60bdac2-333e-400d-a55e-68bfe08de600\",\"trace_id\":\"55812ccd-200b-422f-9b2e-843c665f03f7\"}\n[2026-05-07 12:42:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c60bdac2-333e-400d-a55e-68bfe08de600\",\"trace_id\":\"55812ccd-200b-422f-9b2e-843c665f03f7\"}\n[2026-05-07 12:42:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"c60bdac2-333e-400d-a55e-68bfe08de600\",\"trace_id\":\"55812ccd-200b-422f-9b2e-843c665f03f7\"}\n[2026-05-07 12:42:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c60bdac2-333e-400d-a55e-68bfe08de600\",\"trace_id\":\"55812ccd-200b-422f-9b2e-843c665f03f7\"}\n[2026-05-07 12:42:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ac4b3e02-df92-4e5d-b15c-6857fcdec14a\",\"trace_id\":\"b70f2b3b-aa5d-4502-af9a-286f286ffb2d\"}\n[2026-05-07 12:42:20] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:40:00, 2026-05-07 12:42:00] {\"correlation_id\":\"ac4b3e02-df92-4e5d-b15c-6857fcdec14a\",\"trace_id\":\"b70f2b3b-aa5d-4502-af9a-286f286ffb2d\"}\n[2026-05-07 12:42:20] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:40:00, 2026-05-07 12:42:00] {\"correlation_id\":\"ac4b3e02-df92-4e5d-b15c-6857fcdec14a\",\"trace_id\":\"b70f2b3b-aa5d-4502-af9a-286f286ffb2d\"}\n[2026-05-07 12:42:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ac4b3e02-df92-4e5d-b15c-6857fcdec14a\",\"trace_id\":\"b70f2b3b-aa5d-4502-af9a-286f286ffb2d\"}\n[2026-05-07 12:42:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9fc941ef-8e4a-42d9-b14c-22747fec35a1\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:42:22] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9fc941ef-8e4a-42d9-b14c-22747fec35a1\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:42:22] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9fc941ef-8e4a-42d9-b14c-22747fec35a1\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:42:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9fc941ef-8e4a-42d9-b14c-22747fec35a1\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:42:23] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"62e506b0-bad9-407a-a667-54262b0993da\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:43:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fd767e53-3159-44c6-9863-463426d9ebaa\",\"trace_id\":\"6a5eeca8-1ac1-409e-a54f-d10944f5fa47\"}\n[2026-05-07 12:43:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fd767e53-3159-44c6-9863-463426d9ebaa\",\"trace_id\":\"6a5eeca8-1ac1-409e-a54f-d10944f5fa47\"}\n[2026-05-07 12:43:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fd767e53-3159-44c6-9863-463426d9ebaa\",\"trace_id\":\"6a5eeca8-1ac1-409e-a54f-d10944f5fa47\"}\n[2026-05-07 12:43:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c957ce3-f844-4150-ab3a-859f80120a32\",\"trace_id\":\"10396b9c-bf21-4594-abb2-22b5b2238041\"}\n[2026-05-07 12:43:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c957ce3-f844-4150-ab3a-859f80120a32\",\"trace_id\":\"10396b9c-bf21-4594-abb2-22b5b2238041\"}\n[2026-05-07 12:43:11] local.NOTICE: Monitoring start {\"correlation_id\":\"1c74c202-64d0-4e43-91bc-fce9610a039f\",\"trace_id\":\"1635650d-694d-4db9-9918-fc3109783936\"}\n[2026-05-07 12:43:11] local.NOTICE: Monitoring end {\"correlation_id\":\"1c74c202-64d0-4e43-91bc-fce9610a039f\",\"trace_id\":\"1635650d-694d-4db9-9918-fc3109783936\"}\n[2026-05-07 12:43:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c8374c32-5143-4a98-a5ec-18342095d1a4\",\"trace_id\":\"fcbef39a-6747-42da-8809-87eaf0a6a9c4\"}\n[2026-05-07 12:43:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c8374c32-5143-4a98-a5ec-18342095d1a4\",\"trace_id\":\"fcbef39a-6747-42da-8809-87eaf0a6a9c4\"}\n[2026-05-07 12:43:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5b9d04f5-3ddc-4a94-b8f5-f132bbd0b475\",\"trace_id\":\"8a0e84de-886a-472e-bec5-91c74c144c65\"}\n[2026-05-07 12:43:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5b9d04f5-3ddc-4a94-b8f5-f132bbd0b475\",\"trace_id\":\"8a0e84de-886a-472e-bec5-91c74c144c65\"}\n[2026-05-07 12:43:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"5b9d04f5-3ddc-4a94-b8f5-f132bbd0b475\",\"trace_id\":\"8a0e84de-886a-472e-bec5-91c74c144c65\"}\n[2026-05-07 12:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5b9d04f5-3ddc-4a94-b8f5-f132bbd0b475\",\"trace_id\":\"8a0e84de-886a-472e-bec5-91c74c144c65\"}\n[2026-05-07 12:43:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f1b5b0b-12c3-431b-85dd-694c3c4c6f0b\",\"trace_id\":\"d6cb0f0e-998f-4a4d-b060-dafa7a4b0ea9\"}\n[2026-05-07 12:43:20] local.NOTICE: Calendar sync start {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f1b5b0b-12c3-431b-85dd-694c3c4c6f0b\",\"trace_id\":\"d6cb0f0e-998f-4a4d-b060-dafa7a4b0ea9\"}\n[2026-05-07 12:43:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 03d14da1-31b7-4273-bf06-164706973900 Correlation ID: c3a371cb-f92b-4939-963c-6c58c36af294 Timestamp: 2026-05-07 12:43:25Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:25Z\\\",\\\"trace_id\\\":\\\"03d14da1-31b7-4273-bf06-164706973900\\\",\\\"correlation_id\\\":\\\"c3a371cb-f92b-4939-963c-6c58c36af294\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: da241322-7b25-41e0-8087-194d8b6e3a00 Correlation ID: 86ae64f4-62f6-4baa-a40c-ee31abda7935 Timestamp: 2026-05-07 12:43:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:26Z\\\",\\\"trace_id\\\":\\\"da241322-7b25-41e0-8087-194d8b6e3a00\\\",\\\"correlation_id\\\":\\\"86ae64f4-62f6-4baa-a40c-ee31abda7935\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: ca00eaf2-23b9-4682-84e9-c21a02f43300 Correlation ID: c5559745-e5ae-4699-bf69-184186896dc0 Timestamp: 2026-05-07 12:43:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:28Z\\\",\\\"trace_id\\\":\\\"ca00eaf2-23b9-4682-84e9-c21a02f43300\\\",\\\"correlation_id\\\":\\\"c5559745-e5ae-4699-bf69-184186896dc0\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 5506cd47-a4e6-47c5-a7f7-e28c1d5d2c00 Correlation ID: 2b0eee07-6a3f-496d-ba45-e6828e21d840 Timestamp: 2026-05-07 12:43:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:28Z\\\",\\\"trace_id\\\":\\\"5506cd47-a4e6-47c5-a7f7-e28c1d5d2c00\\\",\\\"correlation_id\\\":\\\"2b0eee07-6a3f-496d-ba45-e6828e21d840\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c1fe565a-1781-4c30-9888-74b1d1263e00 Correlation ID: 79b13d42-cd84-47d3-a0e5-4f1757f069b3 Timestamp: 2026-05-07 12:43:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:29Z\\\",\\\"trace_id\\\":\\\"c1fe565a-1781-4c30-9888-74b1d1263e00\\\",\\\"correlation_id\\\":\\\"79b13d42-cd84-47d3-a0e5-4f1757f069b3\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring start {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring end {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24921568,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":36.99,\"usage\":24883008,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24921656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":36.31,\"usage\":24884512,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24923096,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778156061,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1692.49,\"usage\":24924720,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25127728,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":38.7,\"usage\":25134888,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25173792,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":2067.19,\"usage\":25267416,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25246056,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":34.81,\"usage\":25249136,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25286952,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":37.57,\"usage\":25208176,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25246656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":3759.34,\"usage\":25425288,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:45:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring start {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring end {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:40\",\"to\":\"12:45\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:35\",\"to\":\"02:40\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:48:01.734581Z\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812325,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812326,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812327,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812328,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812329,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812330,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.ALERT: [SyncActivity] Failed {\"import_id\":812325,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812326,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812327,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812328,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812329,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SyncActivity] Start {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:29:00\",\"to\":\"2026-05-07 12:45:00\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] End {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27584720,\"memory_real_usage\":67108864,\"pid\":32727} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":187.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring end {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"7f8facb7-b029-4341-9cae-48f3a8b4a509\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.52,\"average_seconds_per_request\":0.52} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.96,\"average_seconds_per_request\":0.96} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:55] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.88,\"average_seconds_per_request\":0.88} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring start {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring end {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:30] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":35462,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"081d20a5-1e0f-420c-b525-67d92975cd33\",\"trace_id\":\"cb3bc6cc-5381-4b44-ac18-5309da998235\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring start {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring end {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:07] local.NOTICE: Monitoring start {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:08] local.NOTICE: Monitoring end {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:45\",\"to\":\"12:50\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:40\",\"to\":\"02:45\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}","depth":4,"bounds":{"left":0.52859044,"top":0.10454908,"width":0.47140956,"height":0.89545095},"on_screen":true,"value":"[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"61149f3e-9706-4ebc-afd1-3c48ba89f0e3\",\"trace_id\":\"1f35b6a1-ac0e-4bfd-be09-a730c3209e43\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8d159556-e171-42b6-8619-39c52d489e85\",\"trace_id\":\"410be53d-a74d-416e-ae1d-5c3f2272aa08\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"417bbc90-fd43-4136-b5eb-aaba87bb74f9\",\"trace_id\":\"6a773999-275d-4d1f-b846-fed74c7c5c69\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring start {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:13] local.NOTICE: Monitoring end {\"correlation_id\":\"e8064350-9a09-4ace-8865-1d82d5ce27e4\",\"trace_id\":\"9da060a9-b514-4553-9097-49c0aee4eafd\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}\n[2026-05-07 12:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ff0ee961-0be2-4514-8867-c526c45d66e8\",\"trace_id\":\"689f8009-70c8-4a2f-b029-1d0dff4eab4f\"}\n[2026-05-07 12:37:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e\",\"trace_id\":\"d35331c8-5bc2-453e-a064-52c939ade38b\"}\n[2026-05-07 12:37:19] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e\",\"trace_id\":\"d35331c8-5bc2-453e-a064-52c939ade38b\"}\n[2026-05-07 12:37:19] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e\",\"trace_id\":\"d35331c8-5bc2-453e-a064-52c939ade38b\"}\n[2026-05-07 12:37:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e\",\"trace_id\":\"d35331c8-5bc2-453e-a064-52c939ade38b\"}\n[2026-05-07 12:37:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:29] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"79fe2955-ef22-4de3-9520-070973781875\",\"trace_id\":\"647bf8b6-d813-4042-b6c9-7c65ac5250a9\"}\n[2026-05-07 12:37:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a21b56c6-1fca-4789-b9bc-12c4905d551a\",\"trace_id\":\"4c26a3d4-811a-43b1-9a03-b6fde0596cd7\"}\n[2026-05-07 12:37:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a21b56c6-1fca-4789-b9bc-12c4905d551a\",\"trace_id\":\"4c26a3d4-811a-43b1-9a03-b6fde0596cd7\"}\n[2026-05-07 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c054e185-ff83-4fc9-832d-8602f0d9392d\",\"trace_id\":\"a20d7cbc-230b-41e9-b319-64ed6115cdb3\"}\n[2026-05-07 12:38:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c054e185-ff83-4fc9-832d-8602f0d9392d\",\"trace_id\":\"a20d7cbc-230b-41e9-b319-64ed6115cdb3\"}\n[2026-05-07 12:38:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c054e185-ff83-4fc9-832d-8602f0d9392d\",\"trace_id\":\"a20d7cbc-230b-41e9-b319-64ed6115cdb3\"}\n[2026-05-07 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6172b92e-3c23-4493-bf87-131b1d0e9d33\",\"trace_id\":\"e0e01543-f43e-414a-a235-c33102540da5\"}\n[2026-05-07 12:38:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6172b92e-3c23-4493-bf87-131b1d0e9d33\",\"trace_id\":\"e0e01543-f43e-414a-a235-c33102540da5\"}\n[2026-05-07 12:38:15] local.NOTICE: Monitoring start {\"correlation_id\":\"e43d78fe-c6b7-4ab6-b396-28ecf2d1d0fe\",\"trace_id\":\"df8a8111-a9a3-49b5-a807-fabc23ed3f0d\"}\n[2026-05-07 12:38:15] local.NOTICE: Monitoring end {\"correlation_id\":\"e43d78fe-c6b7-4ab6-b396-28ecf2d1d0fe\",\"trace_id\":\"df8a8111-a9a3-49b5-a807-fabc23ed3f0d\"}\n[2026-05-07 12:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"94007d53-5954-4a9c-8da5-6e58687f1b66\",\"trace_id\":\"7f743245-aef5-49c8-9f19-04a44ee6c448\"}\n[2026-05-07 12:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"94007d53-5954-4a9c-8da5-6e58687f1b66\",\"trace_id\":\"7f743245-aef5-49c8-9f19-04a44ee6c448\"}\n[2026-05-07 12:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14984be8-a3d7-461a-b39b-0bde6a871e79\",\"trace_id\":\"626894d4-f4d5-498c-96b1-896af4e3481f\"}\n[2026-05-07 12:38:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"14984be8-a3d7-461a-b39b-0bde6a871e79\",\"trace_id\":\"626894d4-f4d5-498c-96b1-896af4e3481f\"}\n[2026-05-07 12:38:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"14984be8-a3d7-461a-b39b-0bde6a871e79\",\"trace_id\":\"626894d4-f4d5-498c-96b1-896af4e3481f\"}\n[2026-05-07 12:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14984be8-a3d7-461a-b39b-0bde6a871e79\",\"trace_id\":\"626894d4-f4d5-498c-96b1-896af4e3481f\"}\n[2026-05-07 12:38:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b32f0529-b2c9-43d9-bef0-fe44108dd6f2\",\"trace_id\":\"cca6d28b-af2c-4c5e-ab33-9fe235c1b593\"}\n[2026-05-07 12:38:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:36:00, 2026-05-07 12:38:00] {\"correlation_id\":\"b32f0529-b2c9-43d9-bef0-fe44108dd6f2\",\"trace_id\":\"cca6d28b-af2c-4c5e-ab33-9fe235c1b593\"}\n[2026-05-07 12:38:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:36:00, 2026-05-07 12:38:00] {\"correlation_id\":\"b32f0529-b2c9-43d9-bef0-fe44108dd6f2\",\"trace_id\":\"cca6d28b-af2c-4c5e-ab33-9fe235c1b593\"}\n[2026-05-07 12:38:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b32f0529-b2c9-43d9-bef0-fe44108dd6f2\",\"trace_id\":\"cca6d28b-af2c-4c5e-ab33-9fe235c1b593\"}\n[2026-05-07 12:38:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1e62e4ef-74ad-4e02-95fa-8a5b722e28b8\",\"trace_id\":\"15346c2e-f65a-4521-933c-a89877e4ed99\"}\n[2026-05-07 12:38:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1e62e4ef-74ad-4e02-95fa-8a5b722e28b8\",\"trace_id\":\"15346c2e-f65a-4521-933c-a89877e4ed99\"}\n[2026-05-07 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd5e2503-0d28-4fe8-ad71-2060a7016293\",\"trace_id\":\"d6686dd2-3381-45a7-be10-d7788fb08bad\"}\n[2026-05-07 12:39:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"bd5e2503-0d28-4fe8-ad71-2060a7016293\",\"trace_id\":\"d6686dd2-3381-45a7-be10-d7788fb08bad\"}\n[2026-05-07 12:39:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd5e2503-0d28-4fe8-ad71-2060a7016293\",\"trace_id\":\"d6686dd2-3381-45a7-be10-d7788fb08bad\"}\n[2026-05-07 12:39:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7d3a98b5-8219-4da1-80df-c05cbf309169\",\"trace_id\":\"d63db36a-dc2d-4152-aa80-0f7ba186c38a\"}\n[2026-05-07 12:39:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7d3a98b5-8219-4da1-80df-c05cbf309169\",\"trace_id\":\"d63db36a-dc2d-4152-aa80-0f7ba186c38a\"}\n[2026-05-07 12:39:09] local.NOTICE: Monitoring start {\"correlation_id\":\"2e6a9b0a-8564-413b-b04f-0befbbdc8f14\",\"trace_id\":\"f97569de-cfe3-4fd6-aee6-50e2093b7674\"}\n[2026-05-07 12:39:09] local.NOTICE: Monitoring end {\"correlation_id\":\"2e6a9b0a-8564-413b-b04f-0befbbdc8f14\",\"trace_id\":\"f97569de-cfe3-4fd6-aee6-50e2093b7674\"}\n[2026-05-07 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73e337f9-6075-4b7e-8e2e-a340abc0e137\",\"trace_id\":\"8f221a8a-5887-4f5b-8aea-54ba1ae53809\"}\n[2026-05-07 12:39:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73e337f9-6075-4b7e-8e2e-a340abc0e137\",\"trace_id\":\"8f221a8a-5887-4f5b-8aea-54ba1ae53809\"}\n[2026-05-07 12:39:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"84514a0d-ab6a-40cd-96be-55e4059cfd35\",\"trace_id\":\"5724849b-b6f2-4395-ba0d-54777bd608f7\"}\n[2026-05-07 12:39:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"84514a0d-ab6a-40cd-96be-55e4059cfd35\",\"trace_id\":\"5724849b-b6f2-4395-ba0d-54777bd608f7\"}\n[2026-05-07 12:39:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"84514a0d-ab6a-40cd-96be-55e4059cfd35\",\"trace_id\":\"5724849b-b6f2-4395-ba0d-54777bd608f7\"}\n[2026-05-07 12:39:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"84514a0d-ab6a-40cd-96be-55e4059cfd35\",\"trace_id\":\"5724849b-b6f2-4395-ba0d-54777bd608f7\"}\n[2026-05-07 12:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"229608fd-5718-478e-945a-b73659af51e2\",\"trace_id\":\"a5466567-4cb0-4af7-b225-92c923b93dc6\"}\n[2026-05-07 12:39:19] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"9d92ba6b-b7ea-4e3f-8cd5-9adeed6e7bda\",\"trace_id\":\"c7e5d414-5ff5-435d-a021-b25f67adb1ba\"}\n[2026-05-07 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9f74277c-9272-42d5-9e88-e0b6d5450022\",\"trace_id\":\"676f7aa9-a79d-42cd-bd4b-117110da4d86\"}\n[2026-05-07 12:40:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9f74277c-9272-42d5-9e88-e0b6d5450022\",\"trace_id\":\"676f7aa9-a79d-42cd-bd4b-117110da4d86\"}\n[2026-05-07 12:40:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9f74277c-9272-42d5-9e88-e0b6d5450022\",\"trace_id\":\"676f7aa9-a79d-42cd-bd4b-117110da4d86\"}\n[2026-05-07 12:40:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"796b8264-1d37-4084-b590-f9fdffb4da24\",\"trace_id\":\"fabb4fa8-9220-43da-96a3-e73fd941dfa1\"}\n[2026-05-07 12:40:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"796b8264-1d37-4084-b590-f9fdffb4da24\",\"trace_id\":\"fabb4fa8-9220-43da-96a3-e73fd941dfa1\"}\n[2026-05-07 12:40:10] local.NOTICE: Monitoring start {\"correlation_id\":\"3b74e5a1-0805-42a0-83f2-0e13200ca6c4\",\"trace_id\":\"122d66ab-5d87-4f14-ae9a-ac9299bc4700\"}\n[2026-05-07 12:40:10] local.NOTICE: Monitoring end {\"correlation_id\":\"3b74e5a1-0805-42a0-83f2-0e13200ca6c4\",\"trace_id\":\"122d66ab-5d87-4f14-ae9a-ac9299bc4700\"}\n[2026-05-07 12:40:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3d80b51a-a6e3-4a94-9e12-39afa8e4de8f\",\"trace_id\":\"afb8c319-9eca-478a-a8e0-7ebcc7632de2\"}\n[2026-05-07 12:40:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3d80b51a-a6e3-4a94-9e12-39afa8e4de8f\",\"trace_id\":\"afb8c319-9eca-478a-a8e0-7ebcc7632de2\"}\n[2026-05-07 12:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a7dfa315-507e-46f8-b698-027b663f854c\",\"trace_id\":\"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9\"}\n[2026-05-07 12:40:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a7dfa315-507e-46f8-b698-027b663f854c\",\"trace_id\":\"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9\"}\n[2026-05-07 12:40:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a7dfa315-507e-46f8-b698-027b663f854c\",\"trace_id\":\"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9\"}\n[2026-05-07 12:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a7dfa315-507e-46f8-b698-027b663f854c\",\"trace_id\":\"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9\"}\n[2026-05-07 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14f00b59-9628-4c7d-840a-a00ae1c744db\",\"trace_id\":\"706e6e50-8804-4d0b-a625-3948c0c5329e\"}\n[2026-05-07 12:40:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:38:00, 2026-05-07 12:40:00] {\"correlation_id\":\"14f00b59-9628-4c7d-840a-a00ae1c744db\",\"trace_id\":\"706e6e50-8804-4d0b-a625-3948c0c5329e\"}\n[2026-05-07 12:40:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:38:00, 2026-05-07 12:40:00] {\"correlation_id\":\"14f00b59-9628-4c7d-840a-a00ae1c744db\",\"trace_id\":\"706e6e50-8804-4d0b-a625-3948c0c5329e\"}\n[2026-05-07 12:40:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14f00b59-9628-4c7d-840a-a00ae1c744db\",\"trace_id\":\"706e6e50-8804-4d0b-a625-3948c0c5329e\"}\n[2026-05-07 12:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8e67aed4-0e83-4b6b-bda7-663bcd1f2bf8\",\"trace_id\":\"b330ee8a-ccb6-45e5-a652-16c11f647577\"}\n[2026-05-07 12:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8e67aed4-0e83-4b6b-bda7-663bcd1f2bf8\",\"trace_id\":\"b330ee8a-ccb6-45e5-a652-16c11f647577\"}\n[2026-05-07 12:40:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8dc58840-937d-4b85-9ac2-0463b7dae8f6\",\"trace_id\":\"3b5cc7db-e41e-451d-be96-3664afc516fc\"}\n[2026-05-07 12:40:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8dc58840-937d-4b85-9ac2-0463b7dae8f6\",\"trace_id\":\"3b5cc7db-e41e-451d-be96-3664afc516fc\"}\n[2026-05-07 12:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f3973721-eb91-4c0e-a3d6-a5800098af5f\",\"trace_id\":\"71dd8a58-dbb6-48a6-ae90-83c3be381367\"}\n[2026-05-07 12:40:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"f3973721-eb91-4c0e-a3d6-a5800098af5f\",\"trace_id\":\"71dd8a58-dbb6-48a6-ae90-83c3be381367\"}\n[2026-05-07 12:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f3973721-eb91-4c0e-a3d6-a5800098af5f\",\"trace_id\":\"71dd8a58-dbb6-48a6-ae90-83c3be381367\"}\n[2026-05-07 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"666067c7-495e-4bf7-be29-c2b53c94c92c\",\"trace_id\":\"29de0dbf-0458-4301-8142-974e66c69416\"}\n[2026-05-07 12:40:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:30:00, 2026-05-07 12:35:00] {\"correlation_id\":\"666067c7-495e-4bf7-be29-c2b53c94c92c\",\"trace_id\":\"29de0dbf-0458-4301-8142-974e66c69416\"}\n[2026-05-07 12:40:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:30:00, 2026-05-07 12:35:00] {\"correlation_id\":\"666067c7-495e-4bf7-be29-c2b53c94c92c\",\"trace_id\":\"29de0dbf-0458-4301-8142-974e66c69416\"}\n[2026-05-07 12:40:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"666067c7-495e-4bf7-be29-c2b53c94c92c\",\"trace_id\":\"29de0dbf-0458-4301-8142-974e66c69416\"}\n[2026-05-07 12:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa35f3db-4219-4d4e-9904-4c9a6b02af12\",\"trace_id\":\"485dd04b-b4d8-438a-b9a1-a663d11a88f8\"}\n[2026-05-07 12:40:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:35\",\"to\":\"12:40\"} {\"correlation_id\":\"fa35f3db-4219-4d4e-9904-4c9a6b02af12\",\"trace_id\":\"485dd04b-b4d8-438a-b9a1-a663d11a88f8\"}\n[2026-05-07 12:40:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:30\",\"to\":\"02:35\"} {\"correlation_id\":\"fa35f3db-4219-4d4e-9904-4c9a6b02af12\",\"trace_id\":\"485dd04b-b4d8-438a-b9a1-a663d11a88f8\"}\n[2026-05-07 12:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa35f3db-4219-4d4e-9904-4c9a6b02af12\",\"trace_id\":\"485dd04b-b4d8-438a-b9a1-a663d11a88f8\"}\n[2026-05-07 12:40:32] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:33] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"5de158c4-b330-4296-b45b-18fed629a8ea\",\"trace_id\":\"e36a48df-f245-4c73-ab07-b84a8f19b9b5\"}\n[2026-05-07 12:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ec62eba-0628-4e8c-8298-97c0e88ede05\",\"trace_id\":\"f267a1dc-7170-409a-9528-f1b9f8f84943\"}\n[2026-05-07 12:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cae61022-3dc8-41b5-998d-b66b554012d9\",\"trace_id\":\"33328699-8e81-4d65-9c26-bed20557513b\"}\n[2026-05-07 12:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cae61022-3dc8-41b5-998d-b66b554012d9\",\"trace_id\":\"33328699-8e81-4d65-9c26-bed20557513b\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:42:43.374545Z\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8ec62eba-0628-4e8c-8298-97c0e88ede05\",\"trace_id\":\"f267a1dc-7170-409a-9528-f1b9f8f84943\"}\n[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d36fe1e1-6591-4345-adac-d193747b67da\",\"trace_id\":\"59431cca-4062-48fe-9879-4599646c00b0\"}\n[2026-05-07 12:40:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d36fe1e1-6591-4345-adac-d193747b67da\",\"trace_id\":\"59431cca-4062-48fe-9879-4599646c00b0\"}\n[2026-05-07 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"60d70dec-5cff-4b5d-b8c7-765fede49b1c\",\"trace_id\":\"a9567026-0293-48c7-9e56-75832ac488ee\"}\n[2026-05-07 12:40:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"60d70dec-5cff-4b5d-b8c7-765fede49b1c\",\"trace_id\":\"a9567026-0293-48c7-9e56-75832ac488ee\"}\n[2026-05-07 12:40:53] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:53] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:40:54] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"887bea2f-c517-4731-a288-31ec685e8aeb\",\"trace_id\":\"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b\"}\n[2026-05-07 12:41:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"887bea2f-c517-4731-a288-31ec685e8aeb\",\"trace_id\":\"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b\"}\n[2026-05-07 12:41:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"887bea2f-c517-4731-a288-31ec685e8aeb\",\"trace_id\":\"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b\"}\n[2026-05-07 12:41:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"774cbbc3-b2b1-4425-ad60-108ba21929d8\",\"trace_id\":\"4b36526a-a9f6-49b5-b21e-71a53fe14cfa\"}\n[2026-05-07 12:41:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"774cbbc3-b2b1-4425-ad60-108ba21929d8\",\"trace_id\":\"4b36526a-a9f6-49b5-b21e-71a53fe14cfa\"}\n[2026-05-07 12:41:09] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:09] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:09] local.NOTICE: Monitoring start {\"correlation_id\":\"3923d9ae-2861-49f1-9a94-cc17a36cbb37\",\"trace_id\":\"34eeb3fc-9029-40e6-8db4-6bacc5c6d395\"}\n[2026-05-07 12:41:09] local.NOTICE: Monitoring end {\"correlation_id\":\"3923d9ae-2861-49f1-9a94-cc17a36cbb37\",\"trace_id\":\"34eeb3fc-9029-40e6-8db4-6bacc5c6d395\"}\n[2026-05-07 12:41:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3f50bd1-d21c-4d8b-8a79-95ec749af7f4\",\"trace_id\":\"97ee560d-4c4c-4d12-9a00-1edb4740a28e\"}\n[2026-05-07 12:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3f50bd1-d21c-4d8b-8a79-95ec749af7f4\",\"trace_id\":\"97ee560d-4c4c-4d12-9a00-1edb4740a28e\"}\n[2026-05-07 12:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6de13ab-9147-4844-93c1-88f0a483374e\",\"trace_id\":\"712e5f76-6189-4e42-bdad-7821d38e99e8\"}\n[2026-05-07 12:41:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b6de13ab-9147-4844-93c1-88f0a483374e\",\"trace_id\":\"712e5f76-6189-4e42-bdad-7821d38e99e8\"}\n[2026-05-07 12:41:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b6de13ab-9147-4844-93c1-88f0a483374e\",\"trace_id\":\"712e5f76-6189-4e42-bdad-7821d38e99e8\"}\n[2026-05-07 12:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6de13ab-9147-4844-93c1-88f0a483374e\",\"trace_id\":\"712e5f76-6189-4e42-bdad-7821d38e99e8\"}\n[2026-05-07 12:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef1fde0f-e6e3-4ecd-809f-fa23c413e47e\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef1fde0f-e6e3-4ecd-809f-fa23c413e47e\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24642552,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:16] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.91,\"average_seconds_per_request\":0.91} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":921.9} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":967.13,\"usage\":24765784,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24743712,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":23.28,\"usage\":24881008,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"53c588cb-afab-4abf-b3aa-ab1d21f611eb\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24919448,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.19,\"usage\":24881104,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24919472,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":11.58,\"usage\":24882248,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"bd22dbfc-2726-4eef-a4fc-4b796f0b5162\",\"trace_id\":\"c10cb871-d08f-4b8a-bdcb-66ce79a8d320\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":182.0,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:41:39] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"cdd7797e-626c-439c-8697-57b31ed35f1e\",\"trace_id\":\"f10e250f-17c7-4565-81f1-3f8493969520\"}\n[2026-05-07 12:42:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"158f6f82-1803-435d-be52-9f6140495232\",\"trace_id\":\"040e2fc3-1836-44eb-8085-c394063f8cbe\"}\n[2026-05-07 12:42:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"158f6f82-1803-435d-be52-9f6140495232\",\"trace_id\":\"040e2fc3-1836-44eb-8085-c394063f8cbe\"}\n[2026-05-07 12:42:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"158f6f82-1803-435d-be52-9f6140495232\",\"trace_id\":\"040e2fc3-1836-44eb-8085-c394063f8cbe\"}\n[2026-05-07 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ae1e9744-d34d-4b87-b49b-8632d6c80877\",\"trace_id\":\"f860352b-abab-4621-816a-0dabbb99a147\"}\n[2026-05-07 12:42:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ae1e9744-d34d-4b87-b49b-8632d6c80877\",\"trace_id\":\"f860352b-abab-4621-816a-0dabbb99a147\"}\n[2026-05-07 12:42:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f59c65dd-b025-413c-aa53-9841f11fb7cc\",\"trace_id\":\"63969c40-fcb9-4604-ae95-24db3eb2a6dd\"}\n[2026-05-07 12:42:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f59c65dd-b025-413c-aa53-9841f11fb7cc\",\"trace_id\":\"63969c40-fcb9-4604-ae95-24db3eb2a6dd\"}\n[2026-05-07 12:42:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"90d066d1-282f-45cd-818e-3b76e25ab055\",\"trace_id\":\"8e3a9530-644f-43ce-b8e9-94b38d9bc816\"}\n[2026-05-07 12:42:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"90d066d1-282f-45cd-818e-3b76e25ab055\",\"trace_id\":\"8e3a9530-644f-43ce-b8e9-94b38d9bc816\"}\n[2026-05-07 12:42:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c60bdac2-333e-400d-a55e-68bfe08de600\",\"trace_id\":\"55812ccd-200b-422f-9b2e-843c665f03f7\"}\n[2026-05-07 12:42:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c60bdac2-333e-400d-a55e-68bfe08de600\",\"trace_id\":\"55812ccd-200b-422f-9b2e-843c665f03f7\"}\n[2026-05-07 12:42:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"c60bdac2-333e-400d-a55e-68bfe08de600\",\"trace_id\":\"55812ccd-200b-422f-9b2e-843c665f03f7\"}\n[2026-05-07 12:42:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c60bdac2-333e-400d-a55e-68bfe08de600\",\"trace_id\":\"55812ccd-200b-422f-9b2e-843c665f03f7\"}\n[2026-05-07 12:42:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ac4b3e02-df92-4e5d-b15c-6857fcdec14a\",\"trace_id\":\"b70f2b3b-aa5d-4502-af9a-286f286ffb2d\"}\n[2026-05-07 12:42:20] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:40:00, 2026-05-07 12:42:00] {\"correlation_id\":\"ac4b3e02-df92-4e5d-b15c-6857fcdec14a\",\"trace_id\":\"b70f2b3b-aa5d-4502-af9a-286f286ffb2d\"}\n[2026-05-07 12:42:20] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:40:00, 2026-05-07 12:42:00] {\"correlation_id\":\"ac4b3e02-df92-4e5d-b15c-6857fcdec14a\",\"trace_id\":\"b70f2b3b-aa5d-4502-af9a-286f286ffb2d\"}\n[2026-05-07 12:42:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ac4b3e02-df92-4e5d-b15c-6857fcdec14a\",\"trace_id\":\"b70f2b3b-aa5d-4502-af9a-286f286ffb2d\"}\n[2026-05-07 12:42:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9fc941ef-8e4a-42d9-b14c-22747fec35a1\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:42:22] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9fc941ef-8e4a-42d9-b14c-22747fec35a1\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:42:22] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9fc941ef-8e4a-42d9-b14c-22747fec35a1\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:42:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9fc941ef-8e4a-42d9-b14c-22747fec35a1\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:42:23] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"62e506b0-bad9-407a-a667-54262b0993da\",\"trace_id\":\"a885bdda-b0f0-4b6e-95bf-33a81e23e44f\"}\n[2026-05-07 12:43:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fd767e53-3159-44c6-9863-463426d9ebaa\",\"trace_id\":\"6a5eeca8-1ac1-409e-a54f-d10944f5fa47\"}\n[2026-05-07 12:43:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fd767e53-3159-44c6-9863-463426d9ebaa\",\"trace_id\":\"6a5eeca8-1ac1-409e-a54f-d10944f5fa47\"}\n[2026-05-07 12:43:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fd767e53-3159-44c6-9863-463426d9ebaa\",\"trace_id\":\"6a5eeca8-1ac1-409e-a54f-d10944f5fa47\"}\n[2026-05-07 12:43:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c957ce3-f844-4150-ab3a-859f80120a32\",\"trace_id\":\"10396b9c-bf21-4594-abb2-22b5b2238041\"}\n[2026-05-07 12:43:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c957ce3-f844-4150-ab3a-859f80120a32\",\"trace_id\":\"10396b9c-bf21-4594-abb2-22b5b2238041\"}\n[2026-05-07 12:43:11] local.NOTICE: Monitoring start {\"correlation_id\":\"1c74c202-64d0-4e43-91bc-fce9610a039f\",\"trace_id\":\"1635650d-694d-4db9-9918-fc3109783936\"}\n[2026-05-07 12:43:11] local.NOTICE: Monitoring end {\"correlation_id\":\"1c74c202-64d0-4e43-91bc-fce9610a039f\",\"trace_id\":\"1635650d-694d-4db9-9918-fc3109783936\"}\n[2026-05-07 12:43:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c8374c32-5143-4a98-a5ec-18342095d1a4\",\"trace_id\":\"fcbef39a-6747-42da-8809-87eaf0a6a9c4\"}\n[2026-05-07 12:43:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c8374c32-5143-4a98-a5ec-18342095d1a4\",\"trace_id\":\"fcbef39a-6747-42da-8809-87eaf0a6a9c4\"}\n[2026-05-07 12:43:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5b9d04f5-3ddc-4a94-b8f5-f132bbd0b475\",\"trace_id\":\"8a0e84de-886a-472e-bec5-91c74c144c65\"}\n[2026-05-07 12:43:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5b9d04f5-3ddc-4a94-b8f5-f132bbd0b475\",\"trace_id\":\"8a0e84de-886a-472e-bec5-91c74c144c65\"}\n[2026-05-07 12:43:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"5b9d04f5-3ddc-4a94-b8f5-f132bbd0b475\",\"trace_id\":\"8a0e84de-886a-472e-bec5-91c74c144c65\"}\n[2026-05-07 12:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5b9d04f5-3ddc-4a94-b8f5-f132bbd0b475\",\"trace_id\":\"8a0e84de-886a-472e-bec5-91c74c144c65\"}\n[2026-05-07 12:43:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0f1b5b0b-12c3-431b-85dd-694c3c4c6f0b\",\"trace_id\":\"d6cb0f0e-998f-4a4d-b060-dafa7a4b0ea9\"}\n[2026-05-07 12:43:20] local.NOTICE: Calendar sync start {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0f1b5b0b-12c3-431b-85dd-694c3c4c6f0b\",\"trace_id\":\"d6cb0f0e-998f-4a4d-b060-dafa7a4b0ea9\"}\n[2026-05-07 12:43:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 03d14da1-31b7-4273-bf06-164706973900 Correlation ID: c3a371cb-f92b-4939-963c-6c58c36af294 Timestamp: 2026-05-07 12:43:25Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:25Z\\\",\\\"trace_id\\\":\\\"03d14da1-31b7-4273-bf06-164706973900\\\",\\\"correlation_id\\\":\\\"c3a371cb-f92b-4939-963c-6c58c36af294\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: da241322-7b25-41e0-8087-194d8b6e3a00 Correlation ID: 86ae64f4-62f6-4baa-a40c-ee31abda7935 Timestamp: 2026-05-07 12:43:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:26Z\\\",\\\"trace_id\\\":\\\"da241322-7b25-41e0-8087-194d8b6e3a00\\\",\\\"correlation_id\\\":\\\"86ae64f4-62f6-4baa-a40c-ee31abda7935\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: ca00eaf2-23b9-4682-84e9-c21a02f43300 Correlation ID: c5559745-e5ae-4699-bf69-184186896dc0 Timestamp: 2026-05-07 12:43:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:28Z\\\",\\\"trace_id\\\":\\\"ca00eaf2-23b9-4682-84e9-c21a02f43300\\\",\\\"correlation_id\\\":\\\"c5559745-e5ae-4699-bf69-184186896dc0\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 5506cd47-a4e6-47c5-a7f7-e28c1d5d2c00 Correlation ID: 2b0eee07-6a3f-496d-ba45-e6828e21d840 Timestamp: 2026-05-07 12:43:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:28Z\\\",\\\"trace_id\\\":\\\"5506cd47-a4e6-47c5-a7f7-e28c1d5d2c00\\\",\\\"correlation_id\\\":\\\"2b0eee07-6a3f-496d-ba45-e6828e21d840\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c1fe565a-1781-4c30-9888-74b1d1263e00 Correlation ID: 79b13d42-cd84-47d3-a0e5-4f1757f069b3 Timestamp: 2026-05-07 12:43:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:43:29Z\\\",\\\"trace_id\\\":\\\"c1fe565a-1781-4c30-9888-74b1d1263e00\\\",\\\"correlation_id\\\":\\\"79b13d42-cd84-47d3-a0e5-4f1757f069b3\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring start {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring end {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24921568,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":36.99,\"usage\":24883008,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24921656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":36.31,\"usage\":24884512,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24923096,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778156061,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1692.49,\"usage\":24924720,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25127728,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":38.7,\"usage\":25134888,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25173792,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":2067.19,\"usage\":25267416,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25246056,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":34.81,\"usage\":25249136,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25286952,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":37.57,\"usage\":25208176,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25246656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":3759.34,\"usage\":25425288,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:45:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring start {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring end {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:40\",\"to\":\"12:45\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:35\",\"to\":\"02:40\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:48:01.734581Z\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812325,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812326,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812327,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812328,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812329,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812330,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.ALERT: [SyncActivity] Failed {\"import_id\":812325,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812326,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812327,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812328,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812329,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SyncActivity] Start {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:29:00\",\"to\":\"2026-05-07 12:45:00\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] End {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27584720,\"memory_real_usage\":67108864,\"pid\":32727} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":187.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring end {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"7f8facb7-b029-4341-9cae-48f3a8b4a509\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.52,\"average_seconds_per_request\":0.52} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.96,\"average_seconds_per_request\":0.96} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:55] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.88,\"average_seconds_per_request\":0.88} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring start {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring end {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:30] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":35462,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"081d20a5-1e0f-420c-b525-67d92975cd33\",\"trace_id\":\"cb3bc6cc-5381-4b44-ac18-5309da998235\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring start {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring end {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:07] local.NOTICE: Monitoring start {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:08] local.NOTICE: Monitoring end {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:45\",\"to\":\"12:50\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:40\",\"to\":\"02:45\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.19952115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.5043218,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5372104688746786177
|
-2493464280191951811
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"61149f3e-9706-4ebc-afd1-3c48ba89f0e3","trace_id":"1f35b6a1-ac0e-4bfd-be09-a730c3209e43"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8d159556-e171-42b6-8619-39c52d489e85","trace_id":"410be53d-a74d-416e-ae1d-5c3f2272aa08"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"417bbc90-fd43-4136-b5eb-aaba87bb74f9","trace_id":"6a773999-275d-4d1f-b846-fed74c7c5c69"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring start {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:13] local.NOTICE: Monitoring end {"correlation_id":"e8064350-9a09-4ace-8865-1d82d5ce27e4","trace_id":"9da060a9-b514-4553-9097-49c0aee4eafd"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
[2026-05-07 12:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ff0ee961-0be2-4514-8867-c526c45d66e8","trace_id":"689f8009-70c8-4a2f-b029-1d0dff4eab4f"}
[2026-05-07 12:37:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e","trace_id":"d35331c8-5bc2-453e-a064-52c939ade38b"}
[2026-05-07 12:37:19] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e","trace_id":"d35331c8-5bc2-453e-a064-52c939ade38b"}
[2026-05-07 12:37:19] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e","trace_id":"d35331c8-5bc2-453e-a064-52c939ade38b"}
[2026-05-07 12:37:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ff4c783-54ce-44a7-abfb-0d2ccf78b33e","trace_id":"d35331c8-5bc2-453e-a064-52c939ade38b"}
[2026-05-07 12:37:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:27] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:27] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d97cf89a-ef28-44f8-8eec-ed8d401ff9ef","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:29] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"79fe2955-ef22-4de3-[CREDIT_CARD]","trace_id":"647bf8b6-d813-4042-b6c9-7c65ac5250a9"}
[2026-05-07 12:37:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a21b56c6-1fca-4789-b9bc-12c4905d551a","trace_id":"4c26a3d4-811a-43b1-9a03-b6fde0596cd7"}
[2026-05-07 12:37:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a21b56c6-1fca-4789-b9bc-12c4905d551a","trace_id":"4c26a3d4-811a-43b1-9a03-b6fde0596cd7"}
[2026-05-07 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c054e185-ff83-4fc9-832d-8602f0d9392d","trace_id":"a20d7cbc-230b-41e9-b319-64ed6115cdb3"}
[2026-05-07 12:38:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c054e185-ff83-4fc9-832d-8602f0d9392d","trace_id":"a20d7cbc-230b-41e9-b319-64ed6115cdb3"}
[2026-05-07 12:38:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c054e185-ff83-4fc9-832d-8602f0d9392d","trace_id":"a20d7cbc-230b-41e9-b319-64ed6115cdb3"}
[2026-05-07 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6172b92e-3c23-4493-bf87-131b1d0e9d33","trace_id":"e0e01543-f43e-414a-a235-c33102540da5"}
[2026-05-07 12:38:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6172b92e-3c23-4493-bf87-131b1d0e9d33","trace_id":"e0e01543-f43e-414a-a235-c33102540da5"}
[2026-05-07 12:38:15] local.NOTICE: Monitoring start {"correlation_id":"e43d78fe-c6b7-4ab6-b396-28ecf2d1d0fe","trace_id":"df8a8111-a9a3-49b5-a807-fabc23ed3f0d"}
[2026-05-07 12:38:15] local.NOTICE: Monitoring end {"correlation_id":"e43d78fe-c6b7-4ab6-b396-28ecf2d1d0fe","trace_id":"df8a8111-a9a3-49b5-a807-fabc23ed3f0d"}
[2026-05-07 12:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"94007d53-5954-4a9c-8da5-6e58687f1b66","trace_id":"7f743245-aef5-49c8-9f19-04a44ee6c448"}
[2026-05-07 12:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"94007d53-5954-4a9c-8da5-6e58687f1b66","trace_id":"7f743245-aef5-49c8-9f19-04a44ee6c448"}
[2026-05-07 12:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"14984be8-a3d7-461a-b39b-0bde6a871e79","trace_id":"626894d4-f4d5-498c-96b1-896af4e3481f"}
[2026-05-07 12:38:21] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"14984be8-a3d7-461a-b39b-0bde6a871e79","trace_id":"626894d4-f4d5-498c-96b1-896af4e3481f"}
[2026-05-07 12:38:21] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"14984be8-a3d7-461a-b39b-0bde6a871e79","trace_id":"626894d4-f4d5-498c-96b1-896af4e3481f"}
[2026-05-07 12:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"14984be8-a3d7-461a-b39b-0bde6a871e79","trace_id":"626894d4-f4d5-498c-96b1-896af4e3481f"}
[2026-05-07 12:38:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b32f0529-b2c9-43d9-bef0-fe44108dd6f2","trace_id":"cca6d28b-af2c-4c5e-ab33-9fe235c1b593"}
[2026-05-07 12:38:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:36:00, 2026-05-07 12:38:00] {"correlation_id":"b32f0529-b2c9-43d9-bef0-fe44108dd6f2","trace_id":"cca6d28b-af2c-4c5e-ab33-9fe235c1b593"}
[2026-05-07 12:38:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:36:00, 2026-05-07 12:38:00] {"correlation_id":"b32f0529-b2c9-43d9-bef0-fe44108dd6f2","trace_id":"cca6d28b-af2c-4c5e-ab33-9fe235c1b593"}
[2026-05-07 12:38:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b32f0529-b2c9-43d9-bef0-fe44108dd6f2","trace_id":"cca6d28b-af2c-4c5e-ab33-9fe235c1b593"}
[2026-05-07 12:38:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1e62e4ef-74ad-4e02-95fa-8a5b722e28b8","trace_id":"15346c2e-f65a-4521-933c-a89877e4ed99"}
[2026-05-07 12:38:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1e62e4ef-74ad-4e02-95fa-8a5b722e28b8","trace_id":"15346c2e-f65a-4521-933c-a89877e4ed99"}
[2026-05-07 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd5e2503-0d28-4fe8-ad71-2060a7016293","trace_id":"d6686dd2-3381-45a7-be10-d7788fb08bad"}
[2026-05-07 12:39:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"bd5e2503-0d28-4fe8-ad71-2060a7016293","trace_id":"d6686dd2-3381-45a7-be10-d7788fb08bad"}
[2026-05-07 12:39:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd5e2503-0d28-4fe8-ad71-2060a7016293","trace_id":"d6686dd2-3381-45a7-be10-d7788fb08bad"}
[2026-05-07 12:39:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7d3a98b5-8219-4da1-80df-c05cbf309169","trace_id":"d63db36a-dc2d-4152-aa80-0f7ba186c38a"}
[2026-05-07 12:39:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7d3a98b5-8219-4da1-80df-c05cbf309169","trace_id":"d63db36a-dc2d-4152-aa80-0f7ba186c38a"}
[2026-05-07 12:39:09] local.NOTICE: Monitoring start {"correlation_id":"2e6a9b0a-8564-413b-b04f-0befbbdc8f14","trace_id":"f97569de-cfe3-4fd6-aee6-50e2093b7674"}
[2026-05-07 12:39:09] local.NOTICE: Monitoring end {"correlation_id":"2e6a9b0a-8564-413b-b04f-0befbbdc8f14","trace_id":"f97569de-cfe3-4fd6-aee6-50e2093b7674"}
[2026-05-07 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"73e337f9-6075-4b7e-8e2e-a340abc0e137","trace_id":"8f221a8a-5887-4f5b-8aea-54ba1ae53809"}
[2026-05-07 12:39:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"73e337f9-6075-4b7e-8e2e-a340abc0e137","trace_id":"8f221a8a-5887-4f5b-8aea-54ba1ae53809"}
[2026-05-07 12:39:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"84514a0d-ab6a-40cd-96be-55e4059cfd35","trace_id":"5724849b-b6f2-4395-ba0d-54777bd608f7"}
[2026-05-07 12:39:15] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"84514a0d-ab6a-40cd-96be-55e4059cfd35","trace_id":"5724849b-b6f2-4395-ba0d-54777bd608f7"}
[2026-05-07 12:39:15] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"84514a0d-ab6a-40cd-96be-55e4059cfd35","trace_id":"5724849b-b6f2-4395-ba0d-54777bd608f7"}
[2026-05-07 12:39:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"84514a0d-ab6a-40cd-96be-55e4059cfd35","trace_id":"5724849b-b6f2-4395-ba0d-54777bd608f7"}
[2026-05-07 12:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"229608fd-5718-478e-945a-b73659af51e2","trace_id":"a5466567-4cb0-4af7-b225-92c923b93dc6"}
[2026-05-07 12:39:19] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"9d92ba6b-b7ea-4e3f-8cd5-9adeed6e7bda","trace_id":"c7e5d414-5ff5-435d-a021-b25f67adb1ba"}
[2026-05-07 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9f74277c-9272-42d5-9e88-e0b6d5450022","trace_id":"676f7aa9-a79d-42cd-bd4b-117110da4d86"}
[2026-05-07 12:40:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9f74277c-9272-42d5-9e88-e0b6d5450022","trace_id":"676f7aa9-a79d-42cd-bd4b-117110da4d86"}
[2026-05-07 12:40:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9f74277c-9272-42d5-9e88-e0b6d5450022","trace_id":"676f7aa9-a79d-42cd-bd4b-117110da4d86"}
[2026-05-07 12:40:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"796b8264-1d37-4084-b590-f9fdffb4da24","trace_id":"fabb4fa8-9220-43da-96a3-e73fd941dfa1"}
[2026-05-07 12:40:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"796b8264-1d37-4084-b590-f9fdffb4da24","trace_id":"fabb4fa8-9220-43da-96a3-e73fd941dfa1"}
[2026-05-07 12:40:10] local.NOTICE: Monitoring start {"correlation_id":"3b74e5a1-0805-42a0-83f2-0e13200ca6c4","trace_id":"122d66ab-5d87-4f14-ae9a-ac9299bc4700"}
[2026-05-07 12:40:10] local.NOTICE: Monitoring end {"correlation_id":"3b74e5a1-0805-42a0-83f2-0e13200ca6c4","trace_id":"122d66ab-5d87-4f14-ae9a-ac9299bc4700"}
[2026-05-07 12:40:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3d80b51a-a6e3-4a94-9e12-39afa8e4de8f","trace_id":"afb8c319-9eca-478a-a8e0-7ebcc7632de2"}
[2026-05-07 12:40:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3d80b51a-a6e3-4a94-9e12-39afa8e4de8f","trace_id":"afb8c319-9eca-478a-a8e0-7ebcc7632de2"}
[2026-05-07 12:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a7dfa315-507e-46f8-b698-027b663f854c","trace_id":"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9"}
[2026-05-07 12:40:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"a7dfa315-507e-46f8-b698-027b663f854c","trace_id":"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9"}
[2026-05-07 12:40:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"a7dfa315-507e-46f8-b698-027b663f854c","trace_id":"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9"}
[2026-05-07 12:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a7dfa315-507e-46f8-b698-027b663f854c","trace_id":"b1d63a1c-aeca-4ba3-830b-bc8433ce07c9"}
[2026-05-07 12:40:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"14f00b59-9628-4c7d-840a-a00ae1c744db","trace_id":"706e6e50-8804-4d0b-a625-3948c0c5329e"}
[2026-05-07 12:40:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:38:00, 2026-05-07 12:40:00] {"correlation_id":"14f00b59-9628-4c7d-840a-a00ae1c744db","trace_id":"706e6e50-8804-4d0b-a625-3948c0c5329e"}
[2026-05-07 12:40:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:38:00, 2026-05-07 12:40:00] {"correlation_id":"14f00b59-9628-4c7d-840a-a00ae1c744db","trace_id":"706e6e50-8804-4d0b-a625-3948c0c5329e"}
[2026-05-07 12:40:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"14f00b59-9628-4c7d-840a-a00ae1c744db","trace_id":"706e6e50-8804-4d0b-a625-3948c0c5329e"}
[2026-05-07 12:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8e67aed4-0e83-4b6b-bda7-663bcd1f2bf8","trace_id":"b330ee8a-ccb6-45e5-a652-16c11f647577"}
[2026-05-07 12:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8e67aed4-0e83-4b6b-bda7-663bcd1f2bf8","trace_id":"b330ee8a-ccb6-45e5-a652-16c11f647577"}
[2026-05-07 12:40:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8dc58840-937d-4b85-9ac2-0463b7dae8f6","trace_id":"3b5cc7db-e41e-451d-be96-3664afc516fc"}
[2026-05-07 12:40:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8dc58840-937d-4b85-9ac2-0463b7dae8f6","trace_id":"3b5cc7db-e41e-451d-be96-3664afc516fc"}
[2026-05-07 12:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f3973721-eb91-4c0e-a3d6-a5800098af5f","trace_id":"71dd8a58-dbb6-48a6-ae90-83c3be381367"}
[2026-05-07 12:40:23] local.INFO: Running pre-meeting notification command {"correlation_id":"f3973721-eb91-4c0e-a3d6-a5800098af5f","trace_id":"71dd8a58-dbb6-48a6-ae90-83c3be381367"}
[2026-05-07 12:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f3973721-eb91-4c0e-a3d6-a5800098af5f","trace_id":"71dd8a58-dbb6-48a6-ae90-83c3be381367"}
[2026-05-07 12:40:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"666067c7-495e-4bf7-be29-c2b53c94c92c","trace_id":"29de0dbf-0458-4301-8142-974e66c69416"}
[2026-05-07 12:40:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:30:00, 2026-05-07 12:35:00] {"correlation_id":"666067c7-495e-4bf7-be29-c2b53c94c92c","trace_id":"29de0dbf-0458-4301-8142-974e66c69416"}
[2026-05-07 12:40:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:30:00, 2026-05-07 12:35:00] {"correlation_id":"666067c7-495e-4bf7-be29-c2b53c94c92c","trace_id":"29de0dbf-0458-4301-8142-974e66c69416"}
[2026-05-07 12:40:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"666067c7-495e-4bf7-be29-c2b53c94c92c","trace_id":"29de0dbf-0458-4301-8142-974e66c69416"}
[2026-05-07 12:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa35f3db-4219-4d4e-9904-4c9a6b02af12","trace_id":"485dd04b-b4d8-438a-b9a1-a663d11a88f8"}
[2026-05-07 12:40:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:35","to":"12:40"} {"correlation_id":"fa35f3db-4219-4d4e-9904-4c9a6b02af12","trace_id":"485dd04b-b4d8-438a-b9a1-a663d11a88f8"}
[2026-05-07 12:40:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:30","to":"02:35"} {"correlation_id":"fa35f3db-4219-4d4e-9904-4c9a6b02af12","trace_id":"485dd04b-b4d8-438a-b9a1-a663d11a88f8"}
[2026-05-07 12:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa35f3db-4219-4d4e-9904-4c9a6b02af12","trace_id":"485dd04b-b4d8-438a-b9a1-a663d11a88f8"}
[2026-05-07 12:40:32] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:33] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"5de158c4-b330-4296-b45b-18fed629a8ea","trace_id":"e36a48df-f245-4c73-ab07-b84a8f19b9b5"}
[2026-05-07 12:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8ec62eba-0628-4e8c-8298-97c0e88ede05","trace_id":"f267a1dc-7170-409a-9528-f1b9f8f84943"}
[2026-05-07 12:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cae61022-3dc8-41b5-998d-b66b554012d9","trace_id":"33328699-8e81-4d65-9c26-bed20557513b"}
[2026-05-07 12:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cae61022-3dc8-41b5-998d-b66b554012d9","trace_id":"33328699-8e81-4d65-9c26-bed20557513b"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:42:43.374545Z"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8ec62eba-0628-4e8c-8298-97c0e88ede05","trace_id":"f267a1dc-7170-409a-9528-f1b9f8f84943"}
[2026-05-07 12:40:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:47] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d36fe1e1-6591-4345-adac-d193747b67da","trace_id":"59431cca-4062-48fe-9879-4599646c00b0"}
[2026-05-07 12:40:47] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d36fe1e1-6591-4345-adac-d193747b67da","trace_id":"59431cca-4062-48fe-9879-4599646c00b0"}
[2026-05-07 12:40:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"60d70dec-5cff-4b5d-b8c7-765fede49b1c","trace_id":"a9567026-0293-48c7-9e56-75832ac488ee"}
[2026-05-07 12:40:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"60d70dec-5cff-4b5d-b8c7-765fede49b1c","trace_id":"a9567026-0293-48c7-9e56-75832ac488ee"}
[2026-05-07 12:40:53] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:53] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:40:54] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:41:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"887bea2f-c517-4731-a288-31ec685e8aeb","trace_id":"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b"}
[2026-05-07 12:41:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"887bea2f-c517-4731-a288-31ec685e8aeb","trace_id":"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b"}
[2026-05-07 12:41:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"887bea2f-c517-4731-a288-31ec685e8aeb","trace_id":"c5ca2bc5-f0fa-4150-b1b3-e319269a5d6b"}
[2026-05-07 12:41:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"774cbbc3-b2b1-4425-ad60-108ba21929d8","trace_id":"4b36526a-a9f6-49b5-b21e-71a53fe14cfa"}
[2026-05-07 12:41:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"774cbbc3-b2b1-4425-ad60-108ba21929d8","trace_id":"4b36526a-a9f6-49b5-b21e-71a53fe14cfa"}
[2026-05-07 12:41:09] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:41:09] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:41:09] local.NOTICE: Monitoring start {"correlation_id":"3923d9ae-2861-49f1-9a94-cc17a36cbb37","trace_id":"34eeb3fc-9029-40e6-8db4-6bacc5c6d395"}
[2026-05-07 12:41:09] local.NOTICE: Monitoring end {"correlation_id":"3923d9ae-2861-49f1-9a94-cc17a36cbb37","trace_id":"34eeb3fc-9029-40e6-8db4-6bacc5c6d395"}
[2026-05-07 12:41:09] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"cdd7797e-626c-439c-8697-57b31ed35f1e","trace_id":"f10e250f-17c7-4565-81f1-3f8493969520"}
[2026-05-07 12:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3f50bd1-d21c-4d8b-8a79-95ec749af7f4","trace_id":"97ee560d-4c4c-4d12-9a00-1edb4740a28e"}
[2026-05-07 12:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3f50bd1-d21c-4d8b-8a79-95ec749af7f4","trace_id":"97ee560d-4c4c-4d12-9a00-1edb4740a28e"}
[2026-05-07 12:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b6de13ab-9147-4844-93c1-88f0a483374e","trace_id":"712e5f76-6189-4e42-bdad-7821d38e99e8"}
[2026-05-07 12:41:13] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b6de13ab-9147-4844-93c1-88f0a483374e","trace_id":"712e5f76-6189-4e42-bdad-7821d38e99e8"}
[2026-05-07 12:41:13] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b6de13ab-9147-4844-93c1-88f0a483374e","trace_id":"712e5f76-6189-4e42-bdad-7821d38e99e8"}
[2026-05-07 12:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b6de13ab-9147-4844-93c1-88f0a483374e","trace_id":"712e5f76-6189-4e42-bdad-7821d38e99e8"}
[2026-05-07 12:41:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ef1fde0f-e6e3-4ecd-809f-fa23c413e47e","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ef1fde0f-e6e3-4ecd-809f-fa23c413e47e","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24642552,"real_usage":65011712,"pid":32723} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:16] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.91,"average_seconds_per_request":0.91} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":921.9} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":967.13,"usage":24765784,"real_usage":65011712,"pid":32723} {"correlation_id":"71ed805c-dc67-4bd5-b0c1-7cc2f9bd0a0f","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24743712,"real_usage":65011712,"pid":32723} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":23.28,"usage":24881008,"real_usage":65011712,"pid":32723,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"53c588cb-afab-4abf-b3aa-ab1d21f611eb","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24919448,"real_usage":65011712,"pid":32723} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":12.19,"usage":24881104,"real_usage":65011712,"pid":32723,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"a57a62b9-1aa5-486c-8e1f-13ed5e4982ee","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24919472,"real_usage":65011712,"pid":32723} {"correlation_id":"bd22dbfc-2726-4eef-a4fc-4b796f0b5162","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"bd22dbfc-2726-4eef-a4fc-4b796f0b5162","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"bd22dbfc-2726-4eef-a4fc-4b796f0b5162","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"bd22dbfc-2726-4eef-a4fc-4b796f0b5162","trace_id":"c10cb871-d08f-4b8a-bdcb-66ce79a8d320"}
[2026-05-07 12:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3926
|
142
|
1
|
2026-05-07T12:51:11.795963+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158271795_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"0a210f2f-6a6e-46de-8954-aa0bddcff83c","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1421,"provider":"office"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1421,"provider":"office","refreshToken":"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6","state":"connected"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","from":null,"to":null,"delta":"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=","last_sync":"2026-01-19 07:48:40","dateMode":"daily"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {"provider":"pipedrive","user_id":241,"message":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1421,"provider":"office","state":"connected"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {"calendarId":"9e8b1a2c-1a8f-42bd-b161-810fc0baf540","from":null,"to":null,"delta":"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ","last_sync":"2026-05-06 15:58:35","dateMode":"daily"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {"calendarId":"9e8b1a2c-1a8f-42bd-b161-810fc0baf540"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:44:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"02c82719-4b7f-46bc-b6df-15da02e7d1ac","trace_id":"984d36dd-d791-493e-89ce-84cdfc3645d6"}
[2026-05-07 12:44:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"02c82719-4b7f-46bc-b6df-15da02e7d1ac","trace_id":"984d36dd-d791-493e-89ce-84cdfc3645d6"}
[2026-05-07 12:44:16] local.NOTICE: Monitoring start {"correlation_id":"37777418-52ab-4b19-b282-1ce5fb875ed8","trace_id":"7a8d8508-d8bc-4a24-8100-7be23e473dc5"}
[2026-05-07 12:44:16] local.NOTICE: Monitoring end {"correlation_id":"37777418-52ab-4b19-b282-1ce5fb875ed8","trace_id":"7a8d8508-d8bc-4a24-8100-7be23e473dc5"}
[2026-05-07 12:44:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"221835f1-beb7-4be5-addf-b7557e9d7c4d","trace_id":"08e931d6-1301-435a-8520-1c67b17152bb"}
[2026-05-07 12:44:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"221835f1-beb7-4be5-addf-b7557e9d7c4d","trace_id":"08e931d6-1301-435a-8520-1c67b17152bb"}
[2026-05-07 12:44:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5df90379-2a6b-469f-8215-67764b135217","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5df90379-2a6b-469f-8215-67764b135217","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {"team":"6473c918-d8db-4ded-a52b-4febfd7b7c02","usage":24921568,"real_usage":65011712,"pid":32723} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-04-28 06:31:37"}}} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {"team":"6473c918-d8db-4ded-a52b-4febfd7b7c02","provider":"salesforce","status":"disconnected","duration_ms":36.99,"usage":24883008,"real_usage":65011712,"pid":32723,"reason":"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {"team":"51467630-d89d-480b-be20-933e64a042f7","usage":24921656,"real_usage":65011712,"pid":32723} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {"team":"51467630-d89d-480b-be20-933e64a042f7","provider":"pipedrive","status":"disconnected","duration_ms":36.31,"usage":24884512,"real_usage":65011712,"pid":32723,"reason":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {"team":"396ed57c-e3c4-49be-8290-37c32955f7c7","usage":24923096,"real_usage":65011712,"pid":32723} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"copper","crm_owner":333,"team_id":27} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {"method":"POST","endpoint":"leads/search","options":[],"body":{"minimum_modified_date":1778156061,"sort_by":"date_modified","page_number":1},"status_code":403,"error":"{\"success\":false,\"status\":403,\"message\":\"Feature not enabled\"}"} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {"team":"396ed57c-e3c4-49be-8290-37c32955f7c7","provider":"copper","status":"completed","duration_ms":1692.49,"usage":24924720,"real_usage":65011712,"pid":32723} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {"team":"fda3cbdf-1117-4ba5-86f8-775f548b3a28","usage":25127728,"real_usage":65011712,"pid":32723} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {"team":"fda3cbdf-1117-4ba5-86f8-775f548b3a28","provider":"pipedrive","status":"disconnected","duration_ms":38.7,"usage":25134888,"real_usage":65011712,"pid":32723,"reason":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {"team":"3ff5a02a-86fb-4357-b1d6-a04e26c38602","usage":25173792,"real_usage":65011712,"pid":32723} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1219,"provider":"close"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1219,"provider":"close"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"close","crm_owner":257,"team_id":31} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {"team":"3ff5a02a-86fb-4357-b1d6-a04e26c38602","provider":"close","status":"completed","duration_ms":2067.19,"usage":25267416,"real_usage":65011712,"pid":32723} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {"team":"1640a0ac-19da-4c3b-90f7-87525f07a6d2","usage":25246056,"real_usage":65011712,"pid":32723} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {"userId":"941d12a6-e84f-4c3a-a4c8-2ef433792095","account":{"Jiminny\\Models\\SocialAccount":{"id":348,"sociable_id":121,"provider_user_id":null,"expires":1733727508,"refresh_token_expires":null,"provider":"bullhorn","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2021-04-06 11:07:26","updated_at":"2024-12-09 15:10:40"}}} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"bullhorn","crm_owner":121,"team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"bullhorn","team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"bullhorn","team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {"team":"1640a0ac-19da-4c3b-90f7-87525f07a6d2","provider":"bullhorn","status":"disconnected","duration_ms":34.81,"usage":25249136,"real_usage":65011712,"pid":32723,"reason":"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {"team":"0c33bf2d-1c77-4200-8ed6-6147ad444c30","usage":25286952,"real_usage":65011712,"pid":32723} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"ed89227b-e364-4dfb-b4bf-343f154bf21e","account":{"Jiminny\\Models\\SocialAccount":{"id":1360,"sociable_id":245,"provider_user_id":"0052g000003frZNAAY","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2024-09-02 06:11:55","updated_at":"2024-12-11 08:50:23"}}} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":245,"team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {"team":"0c33bf2d-1c77-4200-8ed6-6147ad444c30","provider":"salesforce","status":"disconnected","duration_ms":37.57,"usage":25208176,"real_usage":65011712,"pid":32723,"reason":"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {"team":"1ece66c8-feb1-4df1-b321-21607daf4623","usage":25246656,"real_usage":65011712,"pid":32723} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {"parameters":{"since":"2026-05-07 12:14:31","strategy":"lastModified"},"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-deals/run","full_target":"connections/zohocrm/actions/query-deals/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {"parameters":{"since":"2026-05-07 12:14:31","strategy":"lastModified"},"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-companies/run","full_target":"connections/zohocrm/actions/query-companies/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-contacts/run","full_target":"connections/zohocrm/actions/query-contacts/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {"since":"2026-05-07 12:14:31","to":null,"crm_profile_id":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/get-converted-leads/run","full_target":"connections/zohocrm/actions/get-converted-leads/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {"team":"1ece66c8-feb1-4df1-b321-21607daf4623","provider":"integration-app","status":"completed","duration_ms":3759.34,"usage":25425288,"real_usage":65011712,"pid":32723} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:45:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9dada39-e7c2-4562-b6e3-1be261188b4d","trace_id":"6ad37f62-7774-492d-a001-581208f10fff"}
[2026-05-07 12:45:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9dada39-e7c2-4562-b6e3-1be261188b4d","trace_id":"6ad37f62-7774-492d-a001-581208f10fff"}
[2026-05-07 12:45:22] local.NOTICE: Monitoring start {"correlation_id":"5bffe03c-eea7-43cb-82ba-b7bedd3144cf","trace_id":"9f1d5643-8b38-4a14-80b7-70e194f790b6"}
[2026-05-07 12:45:22] local.NOTICE: Monitoring end {"correlation_id":"5bffe03c-eea7-43cb-82ba-b7bedd3144cf","trace_id":"9f1d5643-8b38-4a14-80b7-70e194f790b6"}
[2026-05-07 12:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"97384b1a-e94d-4830-b6f6-49c02ac78337","trace_id":"f14bf171-730f-4e87-aaca-cb102b036424"}
[2026-05-07 12:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"97384b1a-e94d-4830-b6f6-49c02ac78337","trace_id":"f14bf171-730f-4e87-aaca-cb102b036424"}
[2026-05-07 12:45:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f","trace_id":"2a849c4d-d63f-4329-b30f-f0a2ff9478a6"}
[2026-05-07 12:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f","trace_id":"2a849c4d-d63f-4329-b30f-f0a2ff9478a6"}
[2026-05-07 12:45:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da32c044-6ed8-4ca9-aa16-4012f11b3f2a","trace_id":"4d49b72a-fa07-4d03-b5bd-14a94a1d7487"}
[2026-05-07 12:45:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da32c044-6ed8-4ca9-aa16-4012f11b3f2a","trace_id":"4d49b72a-fa07-4d03-b5bd-14a94a1d7487"}
[2026-05-07 12:45:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:40","to":"12:45"} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:35","to":"02:40"} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:46:01] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeComm...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.68484044,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.69348407,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"bounds":{"left":0.7044548,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"bounds":{"left":0.7130984,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"bounds":{"left":0.72174203,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"bounds":{"left":0.73038566,"top":0.07821229,"width":0.032247342,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"bounds":{"left":0.76263297,"top":0.07821229,"width":0.023271276,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"bounds":{"left":0.7859042,"top":0.07821229,"width":0.022938829,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"bounds":{"left":0.8088431,"top":0.08220271,"width":0.0019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring start {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring end {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24921568,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":36.99,\"usage\":24883008,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24921656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":36.31,\"usage\":24884512,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24923096,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778156061,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1692.49,\"usage\":24924720,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25127728,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":38.7,\"usage\":25134888,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25173792,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":2067.19,\"usage\":25267416,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25246056,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":34.81,\"usage\":25249136,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25286952,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":37.57,\"usage\":25208176,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25246656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":3759.34,\"usage\":25425288,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:45:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring start {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring end {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:40\",\"to\":\"12:45\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:35\",\"to\":\"02:40\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:48:01.734581Z\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812325,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812326,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812327,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812328,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812329,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812330,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.ALERT: [SyncActivity] Failed {\"import_id\":812325,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812326,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812327,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812328,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812329,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SyncActivity] Start {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:29:00\",\"to\":\"2026-05-07 12:45:00\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] End {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27584720,\"memory_real_usage\":67108864,\"pid\":32727} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":187.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring end {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"7f8facb7-b029-4341-9cae-48f3a8b4a509\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.52,\"average_seconds_per_request\":0.52} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.96,\"average_seconds_per_request\":0.96} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:55] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.88,\"average_seconds_per_request\":0.88} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring start {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring end {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:30] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":35462,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"081d20a5-1e0f-420c-b525-67d92975cd33\",\"trace_id\":\"cb3bc6cc-5381-4b44-ac18-5309da998235\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring start {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring end {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:07] local.NOTICE: Monitoring start {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:08] local.NOTICE: Monitoring end {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:45\",\"to\":\"12:50\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:40\",\"to\":\"02:45\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:27] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:27] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee4d52c-52d2-4e10-b4e1-23f744d395aa\",\"trace_id\":\"d56b7076-c4b1-4c4e-9091-48a47a52b4a1\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a31ead87-a6dc-4a65-8c18-7ccc322ec1c9\",\"trace_id\":\"9f66a8d0-76d4-4629-98a9-788aa6808022\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a31ead87-a6dc-4a65-8c18-7ccc322ec1c9\",\"trace_id\":\"9f66a8d0-76d4-4629-98a9-788aa6808022\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:52:30.983993Z\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee4d52c-52d2-4e10-b4e1-23f744d395aa\",\"trace_id\":\"d56b7076-c4b1-4c4e-9091-48a47a52b4a1\"}\n[2026-05-07 12:50:31] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:31] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a14f2c8a-f723-4ae8-bc96-4511dc99bf20\",\"trace_id\":\"93924334-ad6e-4876-b51e-c1653183dfc6\"}\n[2026-05-07 12:50:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a14f2c8a-f723-4ae8-bc96-4511dc99bf20\",\"trace_id\":\"93924334-ad6e-4876-b51e-c1653183dfc6\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"05046c63-c14e-4a10-a396-2be1be97f054\",\"trace_id\":\"7f64da86-10a0-404a-9787-17d2a4615291\"}\n[2026-05-07 12:50:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"05046c63-c14e-4a10-a396-2be1be97f054\",\"trace_id\":\"7f64da86-10a0-404a-9787-17d2a4615291\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:58] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.54,\"average_seconds_per_request\":0.54} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:58] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.5,\"average_seconds_per_request\":0.5} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:00] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:00] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:01] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:01] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}","depth":4,"on_screen":true,"value":"\\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring start {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring end {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24921568,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":36.99,\"usage\":24883008,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24921656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":36.31,\"usage\":24884512,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24923096,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778156061,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1692.49,\"usage\":24924720,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25127728,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":38.7,\"usage\":25134888,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25173792,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":2067.19,\"usage\":25267416,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25246056,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":34.81,\"usage\":25249136,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25286952,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":37.57,\"usage\":25208176,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25246656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":3759.34,\"usage\":25425288,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:45:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring start {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring end {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:40\",\"to\":\"12:45\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:35\",\"to\":\"02:40\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:48:01.734581Z\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812325,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812326,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812327,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812328,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812329,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812330,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.ALERT: [SyncActivity] Failed {\"import_id\":812325,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812326,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812327,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812328,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812329,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SyncActivity] Start {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:29:00\",\"to\":\"2026-05-07 12:45:00\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] End {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27584720,\"memory_real_usage\":67108864,\"pid\":32727} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":187.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring end {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"7f8facb7-b029-4341-9cae-48f3a8b4a509\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.52,\"average_seconds_per_request\":0.52} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.96,\"average_seconds_per_request\":0.96} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:55] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.88,\"average_seconds_per_request\":0.88} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring start {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring end {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:30] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":35462,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"081d20a5-1e0f-420c-b525-67d92975cd33\",\"trace_id\":\"cb3bc6cc-5381-4b44-ac18-5309da998235\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring start {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring end {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:07] local.NOTICE: Monitoring start {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:08] local.NOTICE: Monitoring end {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:45\",\"to\":\"12:50\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:40\",\"to\":\"02:45\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:27] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:27] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee4d52c-52d2-4e10-b4e1-23f744d395aa\",\"trace_id\":\"d56b7076-c4b1-4c4e-9091-48a47a52b4a1\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a31ead87-a6dc-4a65-8c18-7ccc322ec1c9\",\"trace_id\":\"9f66a8d0-76d4-4629-98a9-788aa6808022\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a31ead87-a6dc-4a65-8c18-7ccc322ec1c9\",\"trace_id\":\"9f66a8d0-76d4-4629-98a9-788aa6808022\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:52:30.983993Z\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee4d52c-52d2-4e10-b4e1-23f744d395aa\",\"trace_id\":\"d56b7076-c4b1-4c4e-9091-48a47a52b4a1\"}\n[2026-05-07 12:50:31] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:31] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a14f2c8a-f723-4ae8-bc96-4511dc99bf20\",\"trace_id\":\"93924334-ad6e-4876-b51e-c1653183dfc6\"}\n[2026-05-07 12:50:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a14f2c8a-f723-4ae8-bc96-4511dc99bf20\",\"trace_id\":\"93924334-ad6e-4876-b51e-c1653183dfc6\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"05046c63-c14e-4a10-a396-2be1be97f054\",\"trace_id\":\"7f64da86-10a0-404a-9787-17d2a4615291\"}\n[2026-05-07 12:50:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"05046c63-c14e-4a10-a396-2be1be97f054\",\"trace_id\":\"7f64da86-10a0-404a-9787-17d2a4615291\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:58] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.54,\"average_seconds_per_request\":0.54} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:58] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.5,\"average_seconds_per_request\":0.5} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:00] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:00] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:01] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:01] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.19952115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.5043218,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
765832100872978505
|
6225503898155390349
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"0a210f2f-6a6e-46de-8954-aa0bddcff83c","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1421,"provider":"office"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1421,"provider":"office","refreshToken":"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6","state":"connected"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","from":null,"to":null,"delta":"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=","last_sync":"2026-01-19 07:48:40","dateMode":"daily"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {"provider":"pipedrive","user_id":241,"message":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1421,"provider":"office","state":"connected"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {"calendarId":"9e8b1a2c-1a8f-42bd-b161-810fc0baf540","from":null,"to":null,"delta":"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ","last_sync":"2026-05-06 15:58:35","dateMode":"daily"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {"calendarId":"9e8b1a2c-1a8f-42bd-b161-810fc0baf540"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:44:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"02c82719-4b7f-46bc-b6df-15da02e7d1ac","trace_id":"984d36dd-d791-493e-89ce-84cdfc3645d6"}
[2026-05-07 12:44:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"02c82719-4b7f-46bc-b6df-15da02e7d1ac","trace_id":"984d36dd-d791-493e-89ce-84cdfc3645d6"}
[2026-05-07 12:44:16] local.NOTICE: Monitoring start {"correlation_id":"37777418-52ab-4b19-b282-1ce5fb875ed8","trace_id":"7a8d8508-d8bc-4a24-8100-7be23e473dc5"}
[2026-05-07 12:44:16] local.NOTICE: Monitoring end {"correlation_id":"37777418-52ab-4b19-b282-1ce5fb875ed8","trace_id":"7a8d8508-d8bc-4a24-8100-7be23e473dc5"}
[2026-05-07 12:44:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"221835f1-beb7-4be5-addf-b7557e9d7c4d","trace_id":"08e931d6-1301-435a-8520-1c67b17152bb"}
[2026-05-07 12:44:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"221835f1-beb7-4be5-addf-b7557e9d7c4d","trace_id":"08e931d6-1301-435a-8520-1c67b17152bb"}
[2026-05-07 12:44:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5df90379-2a6b-469f-8215-67764b135217","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5df90379-2a6b-469f-8215-67764b135217","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {"team":"6473c918-d8db-4ded-a52b-4febfd7b7c02","usage":24921568,"real_usage":65011712,"pid":32723} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-04-28 06:31:37"}}} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {"team":"6473c918-d8db-4ded-a52b-4febfd7b7c02","provider":"salesforce","status":"disconnected","duration_ms":36.99,"usage":24883008,"real_usage":65011712,"pid":32723,"reason":"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {"team":"51467630-d89d-480b-be20-933e64a042f7","usage":24921656,"real_usage":65011712,"pid":32723} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {"team":"51467630-d89d-480b-be20-933e64a042f7","provider":"pipedrive","status":"disconnected","duration_ms":36.31,"usage":24884512,"real_usage":65011712,"pid":32723,"reason":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {"team":"396ed57c-e3c4-49be-8290-37c32955f7c7","usage":24923096,"real_usage":65011712,"pid":32723} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"copper","crm_owner":333,"team_id":27} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {"method":"POST","endpoint":"leads/search","options":[],"body":{"minimum_modified_date":1778156061,"sort_by":"date_modified","page_number":1},"status_code":403,"error":"{\"success\":false,\"status\":403,\"message\":\"Feature not enabled\"}"} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {"team":"396ed57c-e3c4-49be-8290-37c32955f7c7","provider":"copper","status":"completed","duration_ms":1692.49,"usage":24924720,"real_usage":65011712,"pid":32723} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {"team":"fda3cbdf-1117-4ba5-86f8-775f548b3a28","usage":25127728,"real_usage":65011712,"pid":32723} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {"team":"fda3cbdf-1117-4ba5-86f8-775f548b3a28","provider":"pipedrive","status":"disconnected","duration_ms":38.7,"usage":25134888,"real_usage":65011712,"pid":32723,"reason":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {"team":"3ff5a02a-86fb-4357-b1d6-a04e26c38602","usage":25173792,"real_usage":65011712,"pid":32723} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1219,"provider":"close"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1219,"provider":"close"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"close","crm_owner":257,"team_id":31} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {"team":"3ff5a02a-86fb-4357-b1d6-a04e26c38602","provider":"close","status":"completed","duration_ms":2067.19,"usage":25267416,"real_usage":65011712,"pid":32723} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {"team":"1640a0ac-19da-4c3b-90f7-87525f07a6d2","usage":25246056,"real_usage":65011712,"pid":32723} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {"userId":"941d12a6-e84f-4c3a-a4c8-2ef433792095","account":{"Jiminny\\Models\\SocialAccount":{"id":348,"sociable_id":121,"provider_user_id":null,"expires":1733727508,"refresh_token_expires":null,"provider":"bullhorn","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2021-04-06 11:07:26","updated_at":"2024-12-09 15:10:40"}}} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"bullhorn","crm_owner":121,"team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"bullhorn","team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"bullhorn","team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {"team":"1640a0ac-19da-4c3b-90f7-87525f07a6d2","provider":"bullhorn","status":"disconnected","duration_ms":34.81,"usage":25249136,"real_usage":65011712,"pid":32723,"reason":"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {"team":"0c33bf2d-1c77-4200-8ed6-6147ad444c30","usage":25286952,"real_usage":65011712,"pid":32723} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"ed89227b-e364-4dfb-b4bf-343f154bf21e","account":{"Jiminny\\Models\\SocialAccount":{"id":1360,"sociable_id":245,"provider_user_id":"0052g000003frZNAAY","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2024-09-02 06:11:55","updated_at":"2024-12-11 08:50:23"}}} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":245,"team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {"team":"0c33bf2d-1c77-4200-8ed6-6147ad444c30","provider":"salesforce","status":"disconnected","duration_ms":37.57,"usage":25208176,"real_usage":65011712,"pid":32723,"reason":"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {"team":"1ece66c8-feb1-4df1-b321-21607daf4623","usage":25246656,"real_usage":65011712,"pid":32723} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {"parameters":{"since":"2026-05-07 12:14:31","strategy":"lastModified"},"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-deals/run","full_target":"connections/zohocrm/actions/query-deals/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {"parameters":{"since":"2026-05-07 12:14:31","strategy":"lastModified"},"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-companies/run","full_target":"connections/zohocrm/actions/query-companies/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-contacts/run","full_target":"connections/zohocrm/actions/query-contacts/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {"since":"2026-05-07 12:14:31","to":null,"crm_profile_id":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/get-converted-leads/run","full_target":"connections/zohocrm/actions/get-converted-leads/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {"team":"1ece66c8-feb1-4df1-b321-21607daf4623","provider":"integration-app","status":"completed","duration_ms":3759.34,"usage":25425288,"real_usage":65011712,"pid":32723} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:45:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9dada39-e7c2-4562-b6e3-1be261188b4d","trace_id":"6ad37f62-7774-492d-a001-581208f10fff"}
[2026-05-07 12:45:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9dada39-e7c2-4562-b6e3-1be261188b4d","trace_id":"6ad37f62-7774-492d-a001-581208f10fff"}
[2026-05-07 12:45:22] local.NOTICE: Monitoring start {"correlation_id":"5bffe03c-eea7-43cb-82ba-b7bedd3144cf","trace_id":"9f1d5643-8b38-4a14-80b7-70e194f790b6"}
[2026-05-07 12:45:22] local.NOTICE: Monitoring end {"correlation_id":"5bffe03c-eea7-43cb-82ba-b7bedd3144cf","trace_id":"9f1d5643-8b38-4a14-80b7-70e194f790b6"}
[2026-05-07 12:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"97384b1a-e94d-4830-b6f6-49c02ac78337","trace_id":"f14bf171-730f-4e87-aaca-cb102b036424"}
[2026-05-07 12:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"97384b1a-e94d-4830-b6f6-49c02ac78337","trace_id":"f14bf171-730f-4e87-aaca-cb102b036424"}
[2026-05-07 12:45:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f","trace_id":"2a849c4d-d63f-4329-b30f-f0a2ff9478a6"}
[2026-05-07 12:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f","trace_id":"2a849c4d-d63f-4329-b30f-f0a2ff9478a6"}
[2026-05-07 12:45:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da32c044-6ed8-4ca9-aa16-4012f11b3f2a","trace_id":"4d49b72a-fa07-4d03-b5bd-14a94a1d7487"}
[2026-05-07 12:45:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da32c044-6ed8-4ca9-aa16-4012f11b3f2a","trace_id":"4d49b72a-fa07-4d03-b5bd-14a94a1d7487"}
[2026-05-07 12:45:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:40","to":"12:45"} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:35","to":"02:40"} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:46:01] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeComm...
|
3925
|
NULL
|
NULL
|
NULL
|
|
3927
|
141
|
0
|
2026-05-07T12:51:12.976959+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158272976_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"0a210f2f-6a6e-46de-8954-aa0bddcff83c","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1421,"provider":"office"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1421,"provider":"office","refreshToken":"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6","state":"connected"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","from":null,"to":null,"delta":"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=","last_sync":"2026-01-19 07:48:40","dateMode":"daily"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {"provider":"pipedrive","user_id":241,"message":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1421,"provider":"office","state":"connected"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {"calendarId":"9e8b1a2c-1a8f-42bd-b161-810fc0baf540","from":null,"to":null,"delta":"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ","last_sync":"2026-05-06 15:58:35","dateMode":"daily"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {"calendarId":"9e8b1a2c-1a8f-42bd-b161-810fc0baf540"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:44:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"02c82719-4b7f-46bc-b6df-15da02e7d1ac","trace_id":"984d36dd-d791-493e-89ce-84cdfc3645d6"}
[2026-05-07 12:44:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"02c82719-4b7f-46bc-b6df-15da02e7d1ac","trace_id":"984d36dd-d791-493e-89ce-84cdfc3645d6"}
[2026-05-07 12:44:16] local.NOTICE: Monitoring start {"correlation_id":"37777418-52ab-4b19-b282-1ce5fb875ed8","trace_id":"7a8d8508-d8bc-4a24-8100-7be23e473dc5"}
[2026-05-07 12:44:16] local.NOTICE: Monitoring end {"correlation_id":"37777418-52ab-4b19-b282-1ce5fb875ed8","trace_id":"7a8d8508-d8bc-4a24-8100-7be23e473dc5"}
[2026-05-07 12:44:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"221835f1-beb7-4be5-addf-b7557e9d7c4d","trace_id":"08e931d6-1301-435a-8520-1c67b17152bb"}
[2026-05-07 12:44:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"221835f1-beb7-4be5-addf-b7557e9d7c4d","trace_id":"08e931d6-1301-435a-8520-1c67b17152bb"}
[2026-05-07 12:44:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5df90379-2a6b-469f-8215-67764b135217","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5df90379-2a6b-469f-8215-67764b135217","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {"team":"6473c918-d8db-4ded-a52b-4febfd7b7c02","usage":24921568,"real_usage":65011712,"pid":32723} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-04-28 06:31:37"}}} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {"team":"6473c918-d8db-4ded-a52b-4febfd7b7c02","provider":"salesforce","status":"disconnected","duration_ms":36.99,"usage":24883008,"real_usage":65011712,"pid":32723,"reason":"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {"team":"51467630-d89d-480b-be20-933e64a042f7","usage":24921656,"real_usage":65011712,"pid":32723} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {"team":"51467630-d89d-480b-be20-933e64a042f7","provider":"pipedrive","status":"disconnected","duration_ms":36.31,"usage":24884512,"real_usage":65011712,"pid":32723,"reason":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {"team":"396ed57c-e3c4-49be-8290-37c32955f7c7","usage":24923096,"real_usage":65011712,"pid":32723} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"copper","crm_owner":333,"team_id":27} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {"method":"POST","endpoint":"leads/search","options":[],"body":{"minimum_modified_date":1778156061,"sort_by":"date_modified","page_number":1},"status_code":403,"error":"{\"success\":false,\"status\":403,\"message\":\"Feature not enabled\"}"} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {"team":"396ed57c-e3c4-49be-8290-37c32955f7c7","provider":"copper","status":"completed","duration_ms":1692.49,"usage":24924720,"real_usage":65011712,"pid":32723} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {"team":"fda3cbdf-1117-4ba5-86f8-775f548b3a28","usage":25127728,"real_usage":65011712,"pid":32723} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {"team":"fda3cbdf-1117-4ba5-86f8-775f548b3a28","provider":"pipedrive","status":"disconnected","duration_ms":38.7,"usage":25134888,"real_usage":65011712,"pid":32723,"reason":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {"team":"3ff5a02a-86fb-4357-b1d6-a04e26c38602","usage":25173792,"real_usage":65011712,"pid":32723} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1219,"provider":"close"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1219,"provider":"close"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"close","crm_owner":257,"team_id":31} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {"team":"3ff5a02a-86fb-4357-b1d6-a04e26c38602","provider":"close","status":"completed","duration_ms":2067.19,"usage":25267416,"real_usage":65011712,"pid":32723} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {"team":"1640a0ac-19da-4c3b-90f7-87525f07a6d2","usage":25246056,"real_usage":65011712,"pid":32723} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {"userId":"941d12a6-e84f-4c3a-a4c8-2ef433792095","account":{"Jiminny\\Models\\SocialAccount":{"id":348,"sociable_id":121,"provider_user_id":null,"expires":1733727508,"refresh_token_expires":null,"provider":"bullhorn","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2021-04-06 11:07:26","updated_at":"2024-12-09 15:10:40"}}} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"bullhorn","crm_owner":121,"team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"bullhorn","team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"bullhorn","team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {"team":"1640a0ac-19da-4c3b-90f7-87525f07a6d2","provider":"bullhorn","status":"disconnected","duration_ms":34.81,"usage":25249136,"real_usage":65011712,"pid":32723,"reason":"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {"team":"0c33bf2d-1c77-4200-8ed6-6147ad444c30","usage":25286952,"real_usage":65011712,"pid":32723} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"ed89227b-e364-4dfb-b4bf-343f154bf21e","account":{"Jiminny\\Models\\SocialAccount":{"id":1360,"sociable_id":245,"provider_user_id":"0052g000003frZNAAY","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2024-09-02 06:11:55","updated_at":"2024-12-11 08:50:23"}}} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":245,"team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {"team":"0c33bf2d-1c77-4200-8ed6-6147ad444c30","provider":"salesforce","status":"disconnected","duration_ms":37.57,"usage":25208176,"real_usage":65011712,"pid":32723,"reason":"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {"team":"1ece66c8-feb1-4df1-b321-21607daf4623","usage":25246656,"real_usage":65011712,"pid":32723} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {"parameters":{"since":"2026-05-07 12:14:31","strategy":"lastModified"},"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-deals/run","full_target":"connections/zohocrm/actions/query-deals/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {"parameters":{"since":"2026-05-07 12:14:31","strategy":"lastModified"},"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-companies/run","full_target":"connections/zohocrm/actions/query-companies/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-contacts/run","full_target":"connections/zohocrm/actions/query-contacts/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {"since":"2026-05-07 12:14:31","to":null,"crm_profile_id":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/get-converted-leads/run","full_target":"connections/zohocrm/actions/get-converted-leads/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {"team":"1ece66c8-feb1-4df1-b321-21607daf4623","provider":"integration-app","status":"completed","duration_ms":3759.34,"usage":25425288,"real_usage":65011712,"pid":32723} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:45:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9dada39-e7c2-4562-b6e3-1be261188b4d","trace_id":"6ad37f62-7774-492d-a001-581208f10fff"}
[2026-05-07 12:45:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9dada39-e7c2-4562-b6e3-1be261188b4d","trace_id":"6ad37f62-7774-492d-a001-581208f10fff"}
[2026-05-07 12:45:22] local.NOTICE: Monitoring start {"correlation_id":"5bffe03c-eea7-43cb-82ba-b7bedd3144cf","trace_id":"9f1d5643-8b38-4a14-80b7-70e194f790b6"}
[2026-05-07 12:45:22] local.NOTICE: Monitoring end {"correlation_id":"5bffe03c-eea7-43cb-82ba-b7bedd3144cf","trace_id":"9f1d5643-8b38-4a14-80b7-70e194f790b6"}
[2026-05-07 12:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"97384b1a-e94d-4830-b6f6-49c02ac78337","trace_id":"f14bf171-730f-4e87-aaca-cb102b036424"}
[2026-05-07 12:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"97384b1a-e94d-4830-b6f6-49c02ac78337","trace_id":"f14bf171-730f-4e87-aaca-cb102b036424"}
[2026-05-07 12:45:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f","trace_id":"2a849c4d-d63f-4329-b30f-f0a2ff9478a6"}
[2026-05-07 12:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f","trace_id":"2a849c4d-d63f-4329-b30f-f0a2ff9478a6"}
[2026-05-07 12:45:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da32c044-6ed8-4ca9-aa16-4012f11b3f2a","trace_id":"4d49b72a-fa07-4d03-b5bd-14a94a1d7487"}
[2026-05-07 12:45:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da32c044-6ed8-4ca9-aa16-4012f11b3f2a","trace_id":"4d49b72a-fa07-4d03-b5bd-14a94a1d7487"}
[2026-05-07 12:45:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:40","to":"12:45"} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:35","to":"02:40"} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:46:01] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeComm...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring start {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring end {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24921568,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":36.99,\"usage\":24883008,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24921656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":36.31,\"usage\":24884512,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24923096,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778156061,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1692.49,\"usage\":24924720,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25127728,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":38.7,\"usage\":25134888,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25173792,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":2067.19,\"usage\":25267416,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25246056,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":34.81,\"usage\":25249136,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25286952,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":37.57,\"usage\":25208176,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25246656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":3759.34,\"usage\":25425288,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:45:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring start {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring end {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:40\",\"to\":\"12:45\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:35\",\"to\":\"02:40\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:48:01.734581Z\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812325,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812326,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812327,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812328,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812329,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812330,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.ALERT: [SyncActivity] Failed {\"import_id\":812325,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812326,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812327,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812328,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812329,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SyncActivity] Start {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:29:00\",\"to\":\"2026-05-07 12:45:00\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] End {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27584720,\"memory_real_usage\":67108864,\"pid\":32727} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":187.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring end {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"7f8facb7-b029-4341-9cae-48f3a8b4a509\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.52,\"average_seconds_per_request\":0.52} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.96,\"average_seconds_per_request\":0.96} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:55] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.88,\"average_seconds_per_request\":0.88} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring start {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring end {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:30] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":35462,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"081d20a5-1e0f-420c-b525-67d92975cd33\",\"trace_id\":\"cb3bc6cc-5381-4b44-ac18-5309da998235\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring start {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring end {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:07] local.NOTICE: Monitoring start {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:08] local.NOTICE: Monitoring end {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:45\",\"to\":\"12:50\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:40\",\"to\":\"02:45\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:27] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:27] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee4d52c-52d2-4e10-b4e1-23f744d395aa\",\"trace_id\":\"d56b7076-c4b1-4c4e-9091-48a47a52b4a1\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a31ead87-a6dc-4a65-8c18-7ccc322ec1c9\",\"trace_id\":\"9f66a8d0-76d4-4629-98a9-788aa6808022\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a31ead87-a6dc-4a65-8c18-7ccc322ec1c9\",\"trace_id\":\"9f66a8d0-76d4-4629-98a9-788aa6808022\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:52:30.983993Z\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee4d52c-52d2-4e10-b4e1-23f744d395aa\",\"trace_id\":\"d56b7076-c4b1-4c4e-9091-48a47a52b4a1\"}\n[2026-05-07 12:50:31] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:31] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a14f2c8a-f723-4ae8-bc96-4511dc99bf20\",\"trace_id\":\"93924334-ad6e-4876-b51e-c1653183dfc6\"}\n[2026-05-07 12:50:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a14f2c8a-f723-4ae8-bc96-4511dc99bf20\",\"trace_id\":\"93924334-ad6e-4876-b51e-c1653183dfc6\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"05046c63-c14e-4a10-a396-2be1be97f054\",\"trace_id\":\"7f64da86-10a0-404a-9787-17d2a4615291\"}\n[2026-05-07 12:50:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"05046c63-c14e-4a10-a396-2be1be97f054\",\"trace_id\":\"7f64da86-10a0-404a-9787-17d2a4615291\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:58] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.54,\"average_seconds_per_request\":0.54} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:58] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.5,\"average_seconds_per_request\":0.5} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:00] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:00] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:01] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:01] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c256bed5-026c-48fd-816c-c1ab35ed433a\",\"trace_id\":\"427f9857-a8a8-4050-a224-8214fe0ee736\"}\n[2026-05-07 12:51:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c256bed5-026c-48fd-816c-c1ab35ed433a\",\"trace_id\":\"427f9857-a8a8-4050-a224-8214fe0ee736\"}\n[2026-05-07 12:51:10] local.NOTICE: Monitoring start {\"correlation_id\":\"dcf05df4-150a-4962-8d09-1ff6b4212b7c\",\"trace_id\":\"fcdfd9ca-6378-46f3-a23c-51d333fe711a\"}\n[2026-05-07 12:51:10] local.NOTICE: Monitoring end {\"correlation_id\":\"dcf05df4-150a-4962-8d09-1ff6b4212b7c\",\"trace_id\":\"fcdfd9ca-6378-46f3-a23c-51d333fe711a\"}","depth":4,"on_screen":true,"value":"\\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"0a210f2f-6a6e-46de-8954-aa0bddcff83c\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bf6e5e93-d273-4f7d-8999-132c4b0c5914\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"f1e91ce1-43e5-4949-8a6d-a8f09e379006\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"76c9f568-7b13-4c14-878c-fe439b141ce8\",\"trace_id\":\"5d716465-3b3d-4ce7-8cfd-04024215352f\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733\",\"trace_id\":\"70222427-1438-4fee-a96c-eac56a63e447\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"02c82719-4b7f-46bc-b6df-15da02e7d1ac\",\"trace_id\":\"984d36dd-d791-493e-89ce-84cdfc3645d6\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring start {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:16] local.NOTICE: Monitoring end {\"correlation_id\":\"37777418-52ab-4b19-b282-1ce5fb875ed8\",\"trace_id\":\"7a8d8508-d8bc-4a24-8100-7be23e473dc5\"}\n[2026-05-07 12:44:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"221835f1-beb7-4be5-addf-b7557e9d7c4d\",\"trace_id\":\"08e931d6-1301-435a-8520-1c67b17152bb\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4\",\"trace_id\":\"c07f726d-4843-4611-b2ff-3ce5cb59bdf5\"}\n[2026-05-07 12:44:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44dff08f-1d91-4114-9087-7dcaac460d86\",\"trace_id\":\"f9d870ee-97ef-42f7-82ba-52afe2366ca1\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5df90379-2a6b-469f-8215-67764b135217\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24921568,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":36.99,\"usage\":24883008,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"59837440-df16-416f-952e-ca4f5c5b894c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24921656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":36.31,\"usage\":24884512,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"dcc1fb60-a8f0-4b99-bb26-9183948a20b4\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24923096,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778156061,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1692.49,\"usage\":24924720,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"e91e5024-b6db-44f6-abc0-b8c4eb0065b9\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25127728,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":38.7,\"usage\":25134888,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25173792,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":2067.19,\"usage\":25267416,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"bbf42f35-d15e-411d-ac0b-a118dd62ddfb\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25246056,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":34.81,\"usage\":25249136,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25286952,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":37.57,\"usage\":25208176,\"real_usage\":65011712,\"pid\":32723,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"d9856b45-b2cd-484a-9da1-c863ef8d7388\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25246656,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:48] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 12:14:31\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:49] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:50] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:51] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 12:14:31\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":3759.34,\"usage\":25425288,\"real_usage\":65011712,\"pid\":32723} {\"correlation_id\":\"53836b75-cb32-4906-97b1-c78f1962b2e0\",\"trace_id\":\"e89124b2-dfc1-4e27-96a6-3915f683b162\"}\n[2026-05-07 12:45:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9a62245-1a60-4331-9238-619ccd02ee70\",\"trace_id\":\"415cdabc-248e-44ae-9552-bdbce77b3abd\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9dada39-e7c2-4562-b6e3-1be261188b4d\",\"trace_id\":\"6ad37f62-7774-492d-a001-581208f10fff\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring start {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:22] local.NOTICE: Monitoring end {\"correlation_id\":\"5bffe03c-eea7-43cb-82ba-b7bedd3144cf\",\"trace_id\":\"9f1d5643-8b38-4a14-80b7-70e194f790b6\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97384b1a-e94d-4830-b6f6-49c02ac78337\",\"trace_id\":\"f14bf171-730f-4e87-aaca-cb102b036424\"}\n[2026-05-07 12:45:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582\",\"trace_id\":\"4a9f39ff-58be-4be9-98ae-78951301893b\"}\n[2026-05-07 12:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f\",\"trace_id\":\"2a849c4d-d63f-4329-b30f-f0a2ff9478a6\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da32c044-6ed8-4ca9-aa16-4012f11b3f2a\",\"trace_id\":\"4d49b72a-fa07-4d03-b5bd-14a94a1d7487\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"752ddf8d-8be1-4213-aef2-55294dc56a2e\",\"trace_id\":\"b8b830c4-2b05-4687-b087-a61743ecccf3\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:50] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6b15f756-c5eb-4fe9-a658-61ae167e1dcf\",\"trace_id\":\"d22577ed-ce93-48f1-a9fd-977794d67b5f\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:40\",\"to\":\"12:45\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:35\",\"to\":\"02:40\"} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8c9e4ef4-f932-4eb5-843b-769ac13408a7\",\"trace_id\":\"22df39a3-0459-4abe-9a94-ab97aa9ca730\"}\n[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"17829351-0c75-4325-acc7-cfb78107adeb\",\"trace_id\":\"929cde96-7160-44b0-9ec3-3f551c3b4477\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:48:01.734581Z\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df1f9179-a47d-4442-a7df-98cf14f4e1dc\",\"trace_id\":\"7fb8862b-8dfb-42e4-97bc-65ad622d3274\"}\n[2026-05-07 12:46:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812325,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812326,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812327,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812328,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812329,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Dispatching activity sync job {\"import_id\":812330,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b7861d9-35ad-4e56-b5c5-0acc9f052044\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.ALERT: [SyncActivity] Failed {\"import_id\":812325,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"0c9d7e54-cfbe-4aa4-a0ef-a822be027f50\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eba7d27-ef66-41b2-9d8b-3625e24eb562\",\"trace_id\":\"274ecb4f-9ec7-4b50-af01-b7934787fd7c\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812326,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"0e32baf2-a871-493b-a196-253f95256783\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.ALERT: [SyncActivity] Failed {\"import_id\":812327,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"b9a5c195-0016-406b-be7e-93c6268acc7b\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:08] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812328,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"70879c42-cda6-487b-88e3-cfdc3cbf65b3\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.ALERT: [SyncActivity] Failed {\"import_id\":812329,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"aa424cce-f1f4-41af-a90a-218d2b5da8f7\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:09] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5048e6cf-9673-44b5-abbc-6bf8dd357cd0\",\"trace_id\":\"7cb59ad0-c86f-429a-9b57-ad0a8e45965a\"}\n[2026-05-07 12:46:10] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [SyncActivity] Start {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:10] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:29:00\",\"to\":\"2026-05-07 12:45:00\"} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] End {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":812330,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27584720,\"memory_real_usage\":67108864,\"pid\":32727} {\"correlation_id\":\"64033c39-9a96-4d0f-ac30-7b81501ce683\",\"trace_id\":\"9ec7a7b3-8ea9-48aa-a3cf-874ed3282b51\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:12] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e9df12b1-bc7a-4664-8b48-5906371b72c5\",\"trace_id\":\"85562695-238b-447f-b6a3-e971b166c4df\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":187.9,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:46:57] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8dd8fe1b-0dee-4d05-a704-30389afb3291\",\"trace_id\":\"1f7be82b-1992-43d4-9a48-433613bc7f44\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"498b2d5d-7b2f-45aa-b031-606e1040c8c4\",\"trace_id\":\"716e1e24-c5d7-44e8-b688-3b3bffcd438e\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be201f4f-734a-4724-8a08-645e6c42815a\",\"trace_id\":\"cb290f49-fb41-4755-8585-b3c209e25795\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:09] local.NOTICE: Monitoring end {\"correlation_id\":\"e69f31cd-484b-49bd-859c-623bbbd26af3\",\"trace_id\":\"88997977-10f1-4e2a-83c0-50e571e37a44\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2a504138-186d-42e3-96e5-f643d7702e3b\",\"trace_id\":\"870b6098-d6de-4651-ae59-8c1c8cfda87d\"}\n[2026-05-07 12:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b75031b3-9867-4e31-995c-ea08849689a0\",\"trace_id\":\"5294ea71-2395-44cb-9a6e-b745c5c09e8b\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d87fa2b4-ab9c-4016-8f88-273a0df9aa70\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"7f8facb7-b029-4341-9cae-48f3a8b4a509\",\"trace_id\":\"75a16e1a-caa8-4d61-883a-6a30dc5e0523\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:51] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.52,\"average_seconds_per_request\":0.52} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.96,\"average_seconds_per_request\":0.96} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:54] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:55] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.88,\"average_seconds_per_request\":0.88} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:56] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:47:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"58070d93-2c01-4f3e-b3ce-bc52cd502428\",\"trace_id\":\"bb9f6bc3-51f8-4acd-93d7-da5e722d6e43\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73fb8f92-2676-4d8e-b3a3-94a05ea69796\",\"trace_id\":\"d5aade53-384f-4a8a-b9b2-dbe46ef99c4d\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"49542049-255b-4760-9e23-7d1c900c3134\",\"trace_id\":\"695bcd91-3f91-413c-a7bf-69ebf87e3f41\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring start {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:10] local.NOTICE: Monitoring end {\"correlation_id\":\"12b97eba-1c46-47f7-a568-d18d8378a72b\",\"trace_id\":\"58e93bd6-5c35-400f-8c07-33e8f7b11e6c\"}\n[2026-05-07 12:48:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cadb5693-3e48-4249-9df1-fb3cd5740c43\",\"trace_id\":\"c2fc5bd5-c2ed-45f9-98d7-00797a60fc74\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92952212-1af2-4e9a-ac5b-a2f0bbf35db9\",\"trace_id\":\"bf671706-7811-45e2-8971-b9d12826e46a\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:46:00, 2026-05-07 12:48:00] {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f49ee48a-5aee-41a7-b3db-081d8430f611\",\"trace_id\":\"772fba79-6862-47dd-bb4f-68a31a441fb6\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"42a24f86-9fe5-4049-b43f-95b03556eb29\",\"trace_id\":\"9c2d011e-515d-41ef-ad71-89c6cb137c08\"}\n[2026-05-07 12:48:30] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":35462,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"081d20a5-1e0f-420c-b525-67d92975cd33\",\"trace_id\":\"cb3bc6cc-5381-4b44-ac18-5309da998235\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"25f67db9-62c3-408e-9e83-383828eec23b\",\"trace_id\":\"0f662821-6920-4adc-80e4-478ca83e636d\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"214695a1-4f91-4f63-a72e-f80e44414fb8\",\"trace_id\":\"92b30933-6dae-482c-828a-292088703dc4\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring start {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:08] local.NOTICE: Monitoring end {\"correlation_id\":\"07c7b8b6-3b6a-4c1b-b869-adf33d209dad\",\"trace_id\":\"1b90236f-a2d7-4b8b-b75f-4134f8ea9f41\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1483e184-cb87-4f34-8628-cdcb5df80ce6\",\"trace_id\":\"6039bf78-dd4a-426f-a737-0a63bed309ee\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:49:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"df5525be-0210-4f40-abf4-865b16e8f12c\",\"trace_id\":\"1cfb271a-383d-46fe-b94c-80adc748c3dd\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ce106f33-ddc7-4fbc-9f90-e57c59f602d0\",\"trace_id\":\"03012ef9-9dcb-4e65-be5a-4ec5a43ec782\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99448aa4-3e01-4691-8318-40f126b108aa\",\"trace_id\":\"7de25321-ccda-42fd-a42c-de65a1afac1f\"}\n[2026-05-07 12:50:07] local.NOTICE: Monitoring start {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:08] local.NOTICE: Monitoring end {\"correlation_id\":\"a884ab2b-7113-44a8-8838-090badb02a00\",\"trace_id\":\"f6504680-450b-4f5d-85b9-237c68a5defc\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d43b400e-c8ea-4409-a785-549192fe954e\",\"trace_id\":\"45654d75-0ecf-4994-be61-a6ca00908ed8\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f1a27622-95c2-472f-aff1-bd59de876342\",\"trace_id\":\"f58c459f-5d0b-495f-a54b-83701c990017\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:48:00, 2026-05-07 12:50:00] {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"48788bde-d941-43ec-a4e5-6d19bc76d952\",\"trace_id\":\"7dbfa7c2-cf03-4172-ba24-99b84303d25e\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"76066368-8709-4012-934b-4144d2fbdc9b\",\"trace_id\":\"f2251ef1-25bf-401c-bb01-089b965b41ad\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2070d1ee-85ea-473c-8b6a-f9888da9fc66\",\"trace_id\":\"aebc1259-2263-454a-8d25-fe2ee4d279eb\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"433b6d48-d481-434a-9c9f-cad6f79e6136\",\"trace_id\":\"029bda9d-79e9-4e61-8c06-d96ed71f2f8e\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:40:00, 2026-05-07 12:45:00] {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"624591ab-b2bb-4613-bc71-14ecec6f862a\",\"trace_id\":\"414d1ecf-2ec8-49ca-ac07-813a00725249\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:45\",\"to\":\"12:50\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:40\",\"to\":\"02:45\"} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b6086580-0f94-40fd-8d0a-587488369734\",\"trace_id\":\"e3531e31-bccc-4851-b756-1b8fdc1813b6\"}\n[2026-05-07 12:50:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:27] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:27] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"73769cd8-6369-4357-a08d-26c6c49a22b4\",\"trace_id\":\"1d3dc998-55b4-42b8-8b76-248a2f803707\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee4d52c-52d2-4e10-b4e1-23f744d395aa\",\"trace_id\":\"d56b7076-c4b1-4c4e-9091-48a47a52b4a1\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a31ead87-a6dc-4a65-8c18-7ccc322ec1c9\",\"trace_id\":\"9f66a8d0-76d4-4629-98a9-788aa6808022\"}\n[2026-05-07 12:50:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a31ead87-a6dc-4a65-8c18-7ccc322ec1c9\",\"trace_id\":\"9f66a8d0-76d4-4629-98a9-788aa6808022\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:52:30.983993Z\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:30] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee4d52c-52d2-4e10-b4e1-23f744d395aa\",\"trace_id\":\"d56b7076-c4b1-4c4e-9091-48a47a52b4a1\"}\n[2026-05-07 12:50:31] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:31] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a14f2c8a-f723-4ae8-bc96-4511dc99bf20\",\"trace_id\":\"93924334-ad6e-4876-b51e-c1653183dfc6\"}\n[2026-05-07 12:50:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a14f2c8a-f723-4ae8-bc96-4511dc99bf20\",\"trace_id\":\"93924334-ad6e-4876-b51e-c1653183dfc6\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:36] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"05046c63-c14e-4a10-a396-2be1be97f054\",\"trace_id\":\"7f64da86-10a0-404a-9787-17d2a4615291\"}\n[2026-05-07 12:50:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"05046c63-c14e-4a10-a396-2be1be97f054\",\"trace_id\":\"7f64da86-10a0-404a-9787-17d2a4615291\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:50:57] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:58] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.54,\"average_seconds_per_request\":0.54} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:58] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.5,\"average_seconds_per_request\":0.5} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:50:59] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:00] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:00] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:01] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:01] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"03d55104-fb09-4f4b-8914-89e985071ab1\",\"trace_id\":\"34cb665d-1fcb-460e-a935-fde92b30d371\"}\n[2026-05-07 12:51:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3b0f240f-43c5-4887-ab10-0df27977958e\",\"trace_id\":\"af7b1f0a-2f13-48ed-8ed1-f025e3f54371\"}\n[2026-05-07 12:51:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c256bed5-026c-48fd-816c-c1ab35ed433a\",\"trace_id\":\"427f9857-a8a8-4050-a224-8214fe0ee736\"}\n[2026-05-07 12:51:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c256bed5-026c-48fd-816c-c1ab35ed433a\",\"trace_id\":\"427f9857-a8a8-4050-a224-8214fe0ee736\"}\n[2026-05-07 12:51:10] local.NOTICE: Monitoring start {\"correlation_id\":\"dcf05df4-150a-4962-8d09-1ff6b4212b7c\",\"trace_id\":\"fcdfd9ca-6378-46f3-a23c-51d333fe711a\"}\n[2026-05-07 12:51:10] local.NOTICE: Monitoring end {\"correlation_id\":\"dcf05df4-150a-4962-8d09-1ff6b4212b7c\",\"trace_id\":\"fcdfd9ca-6378-46f3-a23c-51d333fe711a\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
765832100872978505
|
6225503898155390349
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"0a210f2f-6a6e-46de-8954-aa0bddcff83c","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:29] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1421,"provider":"office"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1421,"provider":"office","refreshToken":"e63f91c806cda3fadf5eeb79ff8e2bfcc8cd41119a5f8f215ef0b88d0efb9ce6","state":"connected"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:31] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","from":null,"to":null,"delta":"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=","last_sync":"2026-01-19 07:48:40","dateMode":"daily"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {"provider":"pipedrive","user_id":241,"message":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1421,"provider":"office","state":"connected"} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bf6e5e93-d273-4f7d-8999-132c4b0c5914","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.WARNING: [Calendar] Sync failed {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"f1e91ce1-43e5-4949-8a6d-a8f09e379006","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [Calendar] Processing sync {"calendarId":"9e8b1a2c-1a8f-42bd-b161-810fc0baf540","from":null,"to":null,"delta":"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ","last_sync":"2026-05-06 15:58:35","dateMode":"daily"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:43:32] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {"calendarId":"9e8b1a2c-1a8f-42bd-b161-810fc0baf540"} {"correlation_id":"76c9f568-7b13-4c14-878c-fe439b141ce8","trace_id":"5d716465-3b3d-4ce7-8cfd-04024215352f"}
[2026-05-07 12:44:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b44e5fc2-e6b0-4edc-b43a-dfe1c8bdd733","trace_id":"70222427-1438-4fee-a96c-eac56a63e447"}
[2026-05-07 12:44:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"02c82719-4b7f-46bc-b6df-15da02e7d1ac","trace_id":"984d36dd-d791-493e-89ce-84cdfc3645d6"}
[2026-05-07 12:44:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"02c82719-4b7f-46bc-b6df-15da02e7d1ac","trace_id":"984d36dd-d791-493e-89ce-84cdfc3645d6"}
[2026-05-07 12:44:16] local.NOTICE: Monitoring start {"correlation_id":"37777418-52ab-4b19-b282-1ce5fb875ed8","trace_id":"7a8d8508-d8bc-4a24-8100-7be23e473dc5"}
[2026-05-07 12:44:16] local.NOTICE: Monitoring end {"correlation_id":"37777418-52ab-4b19-b282-1ce5fb875ed8","trace_id":"7a8d8508-d8bc-4a24-8100-7be23e473dc5"}
[2026-05-07 12:44:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"221835f1-beb7-4be5-addf-b7557e9d7c4d","trace_id":"08e931d6-1301-435a-8520-1c67b17152bb"}
[2026-05-07 12:44:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"221835f1-beb7-4be5-addf-b7557e9d7c4d","trace_id":"08e931d6-1301-435a-8520-1c67b17152bb"}
[2026-05-07 12:44:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e8bda8a8-4b7b-460d-b119-d964bd1ea8f4","trace_id":"c07f726d-4843-4611-b2ff-3ce5cb59bdf5"}
[2026-05-07 12:44:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:31] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:32] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:42:00, 2026-05-07 12:44:00] {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"44dff08f-1d91-4114-9087-7dcaac460d86","trace_id":"f9d870ee-97ef-42f7-82ba-52afe2366ca1"}
[2026-05-07 12:44:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5df90379-2a6b-469f-8215-67764b135217","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5df90379-2a6b-469f-8215-67764b135217","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [SyncObjects] Before memory usage: {"team":"6473c918-d8db-4ded-a52b-4febfd7b7c02","usage":24921568,"real_usage":65011712,"pid":32723} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.WARNING: [Salesforce] Account not connected for user {"userId":"641f1acb-16b8-42d1-8726-df52979dad0e","account":{"Jiminny\\Models\\SocialAccount":{"id":1500,"sociable_id":143,"provider_user_id":"0052g000003frelAAA","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2026-02-06 08:39:03","updated_at":"2026-04-28 06:31:37"}}} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:35] local.INFO: [SyncObjects] Sync finished {"team":"6473c918-d8db-4ded-a52b-4febfd7b7c02","provider":"salesforce","status":"disconnected","duration_ms":36.99,"usage":24883008,"real_usage":65011712,"pid":32723,"reason":"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"59837440-df16-416f-952e-ca4f5c5b894c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [SyncObjects] Before memory usage: {"team":"51467630-d89d-480b-be20-933e64a042f7","usage":24921656,"real_usage":65011712,"pid":32723} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":19} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:36] local.INFO: [SyncObjects] Sync finished {"team":"51467630-d89d-480b-be20-933e64a042f7","provider":"pipedrive","status":"disconnected","duration_ms":36.31,"usage":24884512,"real_usage":65011712,"pid":32723,"reason":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"dcc1fb60-a8f0-4b99-bb26-9183948a20b4","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:38] local.INFO: [SyncObjects] Before memory usage: {"team":"396ed57c-e3c4-49be-8290-37c32955f7c7","usage":24923096,"real_usage":65011712,"pid":32723} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"copper","crm_owner":333,"team_id":27} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:39] local.NOTICE: Leads unavailable {"method":"POST","endpoint":"leads/search","options":[],"body":{"minimum_modified_date":1778156061,"sort_by":"date_modified","page_number":1},"status_code":403,"error":"{\"success\":false,\"status\":403,\"message\":\"Feature not enabled\"}"} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {"team":"396ed57c-e3c4-49be-8290-37c32955f7c7","provider":"copper","status":"completed","duration_ms":1692.49,"usage":24924720,"real_usage":65011712,"pid":32723} {"correlation_id":"e91e5024-b6db-44f6-abc0-b8c4eb0065b9","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Before memory usage: {"team":"fda3cbdf-1117-4ba5-86f8-775f548b3a28","usage":25127728,"real_usage":65011712,"pid":32723} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":241,"team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"pipedrive","team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"pipedrive","team_id":28} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:40] local.INFO: [SyncObjects] Sync finished {"team":"fda3cbdf-1117-4ba5-86f8-775f548b3a28","provider":"pipedrive","status":"disconnected","duration_ms":38.7,"usage":25134888,"real_usage":65011712,"pid":32723,"reason":"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"b7ad8ec6-1266-4f91-bcdd-55c98a76c83c","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SyncObjects] Before memory usage: {"team":"3ff5a02a-86fb-4357-b1d6-a04e26c38602","usage":25173792,"real_usage":65011712,"pid":32723} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1219,"provider":"close"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1219,"provider":"close"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"close","crm_owner":257,"team_id":31} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {"team":"3ff5a02a-86fb-4357-b1d6-a04e26c38602","provider":"close","status":"completed","duration_ms":2067.19,"usage":25267416,"real_usage":65011712,"pid":32723} {"correlation_id":"bbf42f35-d15e-411d-ac0b-a118dd62ddfb","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Before memory usage: {"team":"1640a0ac-19da-4c3b-90f7-87525f07a6d2","usage":25246056,"real_usage":65011712,"pid":32723} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.WARNING: [Bullhorn] Account not connected for user {"userId":"941d12a6-e84f-4c3a-a4c8-2ef433792095","account":{"Jiminny\\Models\\SocialAccount":{"id":348,"sociable_id":121,"provider_user_id":null,"expires":1733727508,"refresh_token_expires":null,"provider":"bullhorn","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2021-04-06 11:07:26","updated_at":"2024-12-09 15:10:40"}}} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"bullhorn","crm_owner":121,"team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"bullhorn","team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"bullhorn","team_id":36} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:44] local.INFO: [SyncObjects] Sync finished {"team":"1640a0ac-19da-4c3b-90f7-87525f07a6d2","provider":"bullhorn","status":"disconnected","duration_ms":34.81,"usage":25249136,"real_usage":65011712,"pid":32723,"reason":"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"d6df3bc4-1ad7-4561-9335-d6ed14bdd12b","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [SyncObjects] Before memory usage: {"team":"0c33bf2d-1c77-4200-8ed6-6147ad444c30","usage":25286952,"real_usage":65011712,"pid":32723} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"ed89227b-e364-4dfb-b4bf-343f154bf21e","account":{"Jiminny\\Models\\SocialAccount":{"id":1360,"sociable_id":245,"provider_user_id":"0052g000003frZNAAY","expires":null,"refresh_token_expires":null,"provider":"salesforce","state":"full-refresh","auth_scope":"refresh_token web api","retry_after":null,"created_at":"2024-09-02 06:11:55","updated_at":"2024-12-11 08:50:23"}}} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":245,"team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":59} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:46] local.INFO: [SyncObjects] Sync finished {"team":"0c33bf2d-1c77-4200-8ed6-6147ad444c30","provider":"salesforce","status":"disconnected","duration_ms":37.57,"usage":25208176,"real_usage":65011712,"pid":32723,"reason":"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"d9856b45-b2cd-484a-9da1-c863ef8d7388","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [SyncObjects] Before memory usage: {"team":"1ece66c8-feb1-4df1-b321-21607daf4623","usage":25246656,"real_usage":65011712,"pid":32723} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [integration-app] Syncing opportunities {"parameters":{"since":"2026-05-07 12:14:31","strategy":"lastModified"},"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:48] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-deals/run","full_target":"connections/zohocrm/actions/query-deals/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing opportunities finished successfully {"parameters":{"since":"2026-05-07 12:14:31","strategy":"lastModified"},"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Syncing accounts {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:49] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-companies/run","full_target":"connections/zohocrm/actions/query-companies/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing accounts finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Syncing contacts {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:50] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/query-contacts/run","full_target":"connections/zohocrm/actions/query-contacts/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing contacts finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Syncing leads {"since":"2026-05-07 12:14:31","to":null,"crm_profile_id":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:51] local.INFO: [integration-app] Request {"request":"POST connections/zohocrm/actions/get-converted-leads/run","full_target":"connections/zohocrm/actions/get-converted-leads/run"} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:52] local.INFO: [integration-app] Syncing leads finished successfully {"since":"2026-05-07 12:14:31","to":null,"team_id":3143} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:44:52] local.INFO: [SyncObjects] Sync finished {"team":"1ece66c8-feb1-4df1-b321-21607daf4623","provider":"integration-app","status":"completed","duration_ms":3759.34,"usage":25425288,"real_usage":65011712,"pid":32723} {"correlation_id":"53836b75-cb32-4906-97b1-c78f1962b2e0","trace_id":"e89124b2-dfc1-4e27-96a6-3915f683b162"}
[2026-05-07 12:45:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9a62245-1a60-4331-9238-619ccd02ee70","trace_id":"415cdabc-248e-44ae-9552-bdbce77b3abd"}
[2026-05-07 12:45:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9dada39-e7c2-4562-b6e3-1be261188b4d","trace_id":"6ad37f62-7774-492d-a001-581208f10fff"}
[2026-05-07 12:45:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9dada39-e7c2-4562-b6e3-1be261188b4d","trace_id":"6ad37f62-7774-492d-a001-581208f10fff"}
[2026-05-07 12:45:22] local.NOTICE: Monitoring start {"correlation_id":"5bffe03c-eea7-43cb-82ba-b7bedd3144cf","trace_id":"9f1d5643-8b38-4a14-80b7-70e194f790b6"}
[2026-05-07 12:45:22] local.NOTICE: Monitoring end {"correlation_id":"5bffe03c-eea7-43cb-82ba-b7bedd3144cf","trace_id":"9f1d5643-8b38-4a14-80b7-70e194f790b6"}
[2026-05-07 12:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"97384b1a-e94d-4830-b6f6-49c02ac78337","trace_id":"f14bf171-730f-4e87-aaca-cb102b036424"}
[2026-05-07 12:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"97384b1a-e94d-4830-b6f6-49c02ac78337","trace_id":"f14bf171-730f-4e87-aaca-cb102b036424"}
[2026-05-07 12:45:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:34] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:35] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"91b7ffb7-6f73-4b35-9ce2-6caa2f10e582","trace_id":"4a9f39ff-58be-4be9-98ae-78951301893b"}
[2026-05-07 12:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f","trace_id":"2a849c4d-d63f-4329-b30f-f0a2ff9478a6"}
[2026-05-07 12:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dd7e2285-41ce-4dd1-8d99-e9ba2db9b30f","trace_id":"2a849c4d-d63f-4329-b30f-f0a2ff9478a6"}
[2026-05-07 12:45:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da32c044-6ed8-4ca9-aa16-4012f11b3f2a","trace_id":"4d49b72a-fa07-4d03-b5bd-14a94a1d7487"}
[2026-05-07 12:45:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da32c044-6ed8-4ca9-aa16-4012f11b3f2a","trace_id":"4d49b72a-fa07-4d03-b5bd-14a94a1d7487"}
[2026-05-07 12:45:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:48] local.INFO: Running pre-meeting notification command {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"752ddf8d-8be1-4213-aef2-55294dc56a2e","trace_id":"b8b830c4-2b05-4687-b087-a61743ecccf3"}
[2026-05-07 12:45:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:35:00, 2026-05-07 12:40:00] {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:50] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6b15f756-c5eb-4fe9-a658-61ae167e1dcf","trace_id":"d22577ed-ce93-48f1-a9fd-977794d67b5f"}
[2026-05-07 12:45:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:40","to":"12:45"} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:35","to":"02:40"} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8c9e4ef4-f932-4eb5-843b-769ac13408a7","trace_id":"22df39a3-0459-4abe-9a94-ab97aa9ca730"}
[2026-05-07 12:45:55] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:55] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:56] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:57] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:45:57] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"17829351-0c75-4325-acc7-cfb78107adeb","trace_id":"929cde96-7160-44b0-9ec3-3f551c3b4477"}
[2026-05-07 12:46:01] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeComm...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3947
|
141
|
10
|
2026-05-07T12:51:56.384062+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158316384_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(wbl# Lukas/Stefka 121 • in 1h 39 m100% <478DEV (docker)DOCKERO ₴1DEV (docker)882APP (-zsh)jiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-download:worker-download_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker:worker_00: stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00:stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-emails:worker-emails_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:j1minny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00: startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny: debugMatching contact 0Matching contact 1Matching contact 2Matching contactMatchingcontact 4Matchingcontact 5Matching contact 6Matching contact 7Matching contact 8Matching contact 9root@docker_lamp_1:/home/jiminny# ]-zsh• $4screenpipe*•₴5-zshThu 7 May 15:51:56T₴1₴6DEV...
|
NULL
|
7245726004894355534
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(wbl# Lukas/Stefka 121 • in 1h 39 m100% <478DEV (docker)DOCKERO ₴1DEV (docker)882APP (-zsh)jiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-download:worker-download_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker:worker_00: stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00:stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-emails:worker-emails_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:j1minny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00: startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny: debugMatching contact 0Matching contact 1Matching contact 2Matching contactMatchingcontact 4Matchingcontact 5Matching contact 6Matching contact 7Matching contact 8Matching contact 9root@docker_lamp_1:/home/jiminny# ]-zsh• $4screenpipe*•₴5-zshThu 7 May 15:51:56T₴1₴6DEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3948
|
142
|
12
|
2026-05-07T12:51:56.191052+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158316191_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIeWINavigareCodeLaravelKeractorWindowFV f PhostormVIeWINavigareCodeLaravelKeractorWindowFV faVsco.js°9 master kProleteyT DeleteCrmEntityTrait.phpRateLimitException.php© RateLimitAwareWrapper.php© Client.php(C) TranscodeParameterResc© UserService.php© Uuid.php> D Traits> D UseCases> D User> D Utils› D Validation> OvOphp nelpers.ong© InitialFrontendState.php© Jiminny.php© Plan.php© Serializer.phpC) TeamScimDetails.ohpbootstrap>© build.> contia>@ contrib→ database>M docsM front-end>D lang> node_modules library rootM ohostan> M nublic>O resourcesv Mroutesphp api.phpphp api_v2.phppnp console.onopnp customer_api.onppnp embedded.ongpnp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage>M debugbar… M frameworkv Mloas.aitianoreê audio. wav= custom.loal© JiminnyDebugCommand.php X T IntegrationApp/.../SyncCrmEntitiesTrait.phpobasicapl.ongo syncopportunity.onp© SyncOpportunitiesJob.phpT OpportunitySyncTrait.php© HubspotSingleSyncStrategy.php© WebhookSyncBatchProcessor.php ©ImportOpportunityBatch.phpTImportBatchJobTrait.php© HandleRateLimit.php© Middleware/RateLimited.php© Hubspot/Service.php©) Companies.php© MatchActivityCrmData.php©CrmActivityService.phg© CachedCrmServiceDecorator.php(* Hubspot/.../SyncCrmEntitiesTrait.phguservicelntenace.ono© OpportunitySyncTest.php© RateLimit.php(C) ProviderRateLimiter.phpclass JiminnvDebuaCommand extends Command213245349354= hubspot-journal-poll.log= laravel log< nhnunit ymus tht ispublic finction calculateFromAndTobatePeriod(?Carbon Stolate = nuli): array 1...}private function formatReportPeriodName(string $frequency, Carbon $from, Carbon Sto): stringt...public function sanitizeFileName(string $fileName): string{...}private function getPayload(AutomatedReportsService $automatedReportsService)(...h1 usageprivate function rateLimitoSteam = Team:: find(id: 2)Sconfiq = Steam->qetCrmConfiqurationO:ScrmResolver = app( abstract: Crm0wnerResolver::class.'inteqratzonAdmn' => Steam->oetuwnerol'providerStua' => Sconfia->aetProviderNameolScrmService = scrmResolver->oreoarecrmServiceosfonSi=0.S<10 S++4if S1 % 25 === 0)4Sthis->info"Svncina onnontunitvSi?"):$this->info( string: "Matching contact {$i}");ScrmService->syncOpportunity('374720564');ScrmService->matchByName('Robot');Aube for IdE suanaestiionsa Deteat.more seawritvlisaues fn vour D.Dffiles llTia SonarAnbe Claud for free //lDownload SonarOmbe Server Illear more /llDonit ask again /itodav 102510 hl # Lukas/Stefka 121 - in 1h 39 m100% CAskJiminnyReportActivityServiceTest v= custom.log= laravel.log X 4 SF [jiminny@localhost]HS_local (jiminny@localhost]iii accounts [jiminny@localhost]& console [PROD)console [Ful& console [STAGING]Q- HubspotR2 _ Match case Words Regex ?Thu 7 May 15:51:56M A5 A120 M5 A VUTF-8...
|
NULL
|
5980109765149548124
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIeWINavigareCodeLaravelKeractorWindowFV f PhostormVIeWINavigareCodeLaravelKeractorWindowFV faVsco.js°9 master kProleteyT DeleteCrmEntityTrait.phpRateLimitException.php© RateLimitAwareWrapper.php© Client.php(C) TranscodeParameterResc© UserService.php© Uuid.php> D Traits> D UseCases> D User> D Utils› D Validation> OvOphp nelpers.ong© InitialFrontendState.php© Jiminny.php© Plan.php© Serializer.phpC) TeamScimDetails.ohpbootstrap>© build.> contia>@ contrib→ database>M docsM front-end>D lang> node_modules library rootM ohostan> M nublic>O resourcesv Mroutesphp api.phpphp api_v2.phppnp console.onopnp customer_api.onppnp embedded.ongpnp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage>M debugbar… M frameworkv Mloas.aitianoreê audio. wav= custom.loal© JiminnyDebugCommand.php X T IntegrationApp/.../SyncCrmEntitiesTrait.phpobasicapl.ongo syncopportunity.onp© SyncOpportunitiesJob.phpT OpportunitySyncTrait.php© HubspotSingleSyncStrategy.php© WebhookSyncBatchProcessor.php ©ImportOpportunityBatch.phpTImportBatchJobTrait.php© HandleRateLimit.php© Middleware/RateLimited.php© Hubspot/Service.php©) Companies.php© MatchActivityCrmData.php©CrmActivityService.phg© CachedCrmServiceDecorator.php(* Hubspot/.../SyncCrmEntitiesTrait.phguservicelntenace.ono© OpportunitySyncTest.php© RateLimit.php(C) ProviderRateLimiter.phpclass JiminnvDebuaCommand extends Command213245349354= hubspot-journal-poll.log= laravel log< nhnunit ymus tht ispublic finction calculateFromAndTobatePeriod(?Carbon Stolate = nuli): array 1...}private function formatReportPeriodName(string $frequency, Carbon $from, Carbon Sto): stringt...public function sanitizeFileName(string $fileName): string{...}private function getPayload(AutomatedReportsService $automatedReportsService)(...h1 usageprivate function rateLimitoSteam = Team:: find(id: 2)Sconfiq = Steam->qetCrmConfiqurationO:ScrmResolver = app( abstract: Crm0wnerResolver::class.'inteqratzonAdmn' => Steam->oetuwnerol'providerStua' => Sconfia->aetProviderNameolScrmService = scrmResolver->oreoarecrmServiceosfonSi=0.S<10 S++4if S1 % 25 === 0)4Sthis->info"Svncina onnontunitvSi?"):$this->info( string: "Matching contact {$i}");ScrmService->syncOpportunity('374720564');ScrmService->matchByName('Robot');Aube for IdE suanaestiionsa Deteat.more seawritvlisaues fn vour D.Dffiles llTia SonarAnbe Claud for free //lDownload SonarOmbe Server Illear more /llDonit ask again /itodav 102510 hl # Lukas/Stefka 121 - in 1h 39 m100% CAskJiminnyReportActivityServiceTest v= custom.log= laravel.log X 4 SF [jiminny@localhost]HS_local (jiminny@localhost]iii accounts [jiminny@localhost]& console [PROD)console [Ful& console [STAGING]Q- HubspotR2 _ Match case Words Regex ?Thu 7 May 15:51:56M A5 A120 M5 A VUTF-8...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3949
|
141
|
11
|
2026-05-07T12:51:57.731560+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158317731_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
Editor
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
5
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 10; $i++) {
// if ($i % 25 === 0) {
// $this->info("Syncing opportunity {$i}");
$this->info("Matching contact {$i}");
// }
// $crmService->syncOpportunity('374720564');
$crmService->matchByName('Robot');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Editor","depth":4,"on_screen":true,"role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3259435822567833092
|
-6772997518847808117
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
Editor
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
5
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 10; $i++) {
// if ($i % 25 === 0) {
// $this->info("Syncing opportunity {$i}");
$this->info("Matching contact {$i}");
// }
// $crmService->syncOpportunity('374720564');
$crmService->matchByName('Robot');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3947
|
NULL
|
NULL
|
NULL
|
|
3950
|
142
|
13
|
2026-05-07T12:51:58.759099+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158318759_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
Editor
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
5
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 10; $i++) {
// if ($i % 25 === 0) {
// $this->info("Syncing opportunity {$i}");
$this->info("Matching contact {$i}");
// }
// $crmService->syncOpportunity('374720564');
$crmService->matchByName('Robot');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.53457445,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Hubspot","depth":4,"bounds":{"left":0.5455452,"top":0.07980846,"width":0.11469415,"height":0.015961692},"on_screen":true,"value":"Hubspot","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66921544,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.68484044,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.69348407,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search All","depth":4,"bounds":{"left":0.7044548,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Backward","depth":4,"bounds":{"left":0.7130984,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Forward","depth":4,"bounds":{"left":0.72174203,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match сase","depth":4,"bounds":{"left":0.73038566,"top":0.07821229,"width":0.032247342,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":4,"bounds":{"left":0.76263297,"top":0.07821229,"width":0.023271276,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":4,"bounds":{"left":0.7859042,"top":0.07821229,"width":0.022938829,"height":0.01915403},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"?","depth":4,"bounds":{"left":0.8088431,"top":0.08220271,"width":0.0019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Editor","depth":4,"bounds":{"left":0.52859044,"top":0.10454908,"width":0.45977393,"height":0.8747007},"on_screen":true,"role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.19952115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.5043218,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3259435822567833092
|
-6772997518847808117
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Search History
Hubspot
New Line
Replace History
Replace
New Line
Previous Occurrence
Next Occurrence
Search All
Search Backward
Search Forward
Match сase
Words
Regex
?
Close
Editor
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
5
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 10; $i++) {
// if ($i % 25 === 0) {
// $this->info("Syncing opportunity {$i}");
$this->info("Matching contact {$i}");
// }
// $crmService->syncOpportunity('374720564');
$crmService->matchByName('Robot');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3948
|
NULL
|
NULL
|
NULL
|
|
3951
|
142
|
14
|
2026-05-07T12:52:01.715714+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158321715_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
27
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44f760c-2daf-4f7e-aff2-1b836620eb3e","trace_id":"a310efd4-ef60-4fb1-a993-7e0c23faa93d"}
[2026-05-07 12:51:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f44f760c-2daf-4f7e-aff2-1b836620eb3e","trace_id":"a310efd4-ef60-4fb1-a993-7e0c23faa93d"}
[2026-05-07 12:51:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f44f760c-2daf-4f7e-aff2-1b836620eb3e","trace_id":"a310efd4-ef60-4fb1-a993-7e0c23faa93d"}
[2026-05-07 12:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44f760c-2daf-4f7e-aff2-1b836620eb3e","trace_id":"a310efd4-ef60-4fb1-a993-7e0c23faa93d"}
[2026-05-07 12:51:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5cb75435-273a-4c10-bfef-444675c1ea68","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5cb75435-273a-4c10-bfef-444675c1ea68","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":23293640,"real_usage":65011712,"pid":35454} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":46.78,"usage":23769616,"real_usage":65011712,"pid":35454,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23811032,"real_usage":65011712,"pid":35454} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 10; $i++) {
// if ($i % 25 === 0) {
// $this->info("Syncing opportunity {$i}");
$this->info("Matching contact {$i}");
// }
// $crmService->syncOpportunity('374720564');
$crmService->matchByName('Robot');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"27","depth":4,"bounds":{"left":0.9624335,"top":0.07581804,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44f760c-2daf-4f7e-aff2-1b836620eb3e\",\"trace_id\":\"a310efd4-ef60-4fb1-a993-7e0c23faa93d\"}\n[2026-05-07 12:51:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f44f760c-2daf-4f7e-aff2-1b836620eb3e\",\"trace_id\":\"a310efd4-ef60-4fb1-a993-7e0c23faa93d\"}\n[2026-05-07 12:51:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f44f760c-2daf-4f7e-aff2-1b836620eb3e\",\"trace_id\":\"a310efd4-ef60-4fb1-a993-7e0c23faa93d\"}\n[2026-05-07 12:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44f760c-2daf-4f7e-aff2-1b836620eb3e\",\"trace_id\":\"a310efd4-ef60-4fb1-a993-7e0c23faa93d\"}\n[2026-05-07 12:51:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5cb75435-273a-4c10-bfef-444675c1ea68\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5cb75435-273a-4c10-bfef-444675c1ea68\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":23293640,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":46.78,\"usage\":23769616,\"real_usage\":65011712,\"pid\":35454,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23811032,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.63,\"average_seconds_per_request\":0.63} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":645.47} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":673.44,\"usage\":24159496,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24137464,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":13.37,\"usage\":24296072,\"real_usage\":65011712,\"pid\":35454,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24334440,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.19,\"usage\":24576040,\"real_usage\":65011712,\"pid\":35454,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:27] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:27] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":58,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":360.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}","depth":4,"bounds":{"left":0.5475399,"top":0.0726257,"width":0.4524601,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 12:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44f760c-2daf-4f7e-aff2-1b836620eb3e\",\"trace_id\":\"a310efd4-ef60-4fb1-a993-7e0c23faa93d\"}\n[2026-05-07 12:51:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f44f760c-2daf-4f7e-aff2-1b836620eb3e\",\"trace_id\":\"a310efd4-ef60-4fb1-a993-7e0c23faa93d\"}\n[2026-05-07 12:51:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f44f760c-2daf-4f7e-aff2-1b836620eb3e\",\"trace_id\":\"a310efd4-ef60-4fb1-a993-7e0c23faa93d\"}\n[2026-05-07 12:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44f760c-2daf-4f7e-aff2-1b836620eb3e\",\"trace_id\":\"a310efd4-ef60-4fb1-a993-7e0c23faa93d\"}\n[2026-05-07 12:51:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5cb75435-273a-4c10-bfef-444675c1ea68\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5cb75435-273a-4c10-bfef-444675c1ea68\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":23293640,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":46.78,\"usage\":23769616,\"real_usage\":65011712,\"pid\":35454,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"58e6cc07-f84d-4452-839f-a0f72ec1f0ba\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23811032,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:19] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.63,\"average_seconds_per_request\":0.63} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":645.47} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":673.44,\"usage\":24159496,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"1c850a40-b185-4cd9-83f7-21bfefdef404\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24137464,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":13.37,\"usage\":24296072,\"real_usage\":65011712,\"pid\":35454,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"7e409f73-224e-4540-bf23-13bf2c8f077d\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24334440,\"real_usage\":65011712,\"pid\":35454} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:20] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.19,\"usage\":24576040,\"real_usage\":65011712,\"pid\":35454,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"36fdc61f-a4d6-49db-b0c0-d0dcc57b8fd3\",\"trace_id\":\"07036304-0d25-4805-af55-050a2f0796c4\"}\n[2026-05-07 12:51:27] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:27] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":58,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":360.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}\n[2026-05-07 12:51:28] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"9c196be0-138c-4085-9f0c-32c70ce591fb\",\"trace_id\":\"fd4e96c5-06d4-43f0-be39-0cc8e5a8e238\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.19952115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.5043218,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3536746117281284469
|
-8996789335402156661
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
27
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44f760c-2daf-4f7e-aff2-1b836620eb3e","trace_id":"a310efd4-ef60-4fb1-a993-7e0c23faa93d"}
[2026-05-07 12:51:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f44f760c-2daf-4f7e-aff2-1b836620eb3e","trace_id":"a310efd4-ef60-4fb1-a993-7e0c23faa93d"}
[2026-05-07 12:51:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f44f760c-2daf-4f7e-aff2-1b836620eb3e","trace_id":"a310efd4-ef60-4fb1-a993-7e0c23faa93d"}
[2026-05-07 12:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44f760c-2daf-4f7e-aff2-1b836620eb3e","trace_id":"a310efd4-ef60-4fb1-a993-7e0c23faa93d"}
[2026-05-07 12:51:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5cb75435-273a-4c10-bfef-444675c1ea68","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5cb75435-273a-4c10-bfef-444675c1ea68","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":23293640,"real_usage":65011712,"pid":35454} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.WARNING: [HubSpot] Account not connected for user {"userId":"33e34a7a-1c02-4f04-87ac-22c3a385e6e3","account":{"Jiminny\\Models\\SocialAccount":{"id":306,"sociable_id":109,"provider_user_id":"11348452","expires":1701077403,"refresh_token_expires":null,"provider":"hubspot","state":"full-refresh","auth_scope":null,"retry_after":null,"created_at":"2020-09-01 16:59:04","updated_at":"2023-11-27 09:30:03"}}} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":46.78,"usage":23769616,"real_usage":65011712,"pid":35454,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"58e6cc07-f84d-4452-839f-a0f72ec1f0ba","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23811032,"real_usage":65011712,"pid":35454} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:19] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"1c850a40-b185-4cd9-83f7-21bfefdef404","trace_id":"07036304-0d25-4805-af55-050a2f0796c4"}
[2026-05-07 12:51:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 10; $i++) {
// if ($i % 25 === 0) {
// $this->info("Syncing opportunity {$i}");
$this->info("Matching contact {$i}");
// }
// $crmService->syncOpportunity('374720564');
$crmService->matchByName('Robot');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3953
|
142
|
15
|
2026-05-07T12:52:04.664024+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158324664_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
5
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 10; $i++) {
// if ($i % 25 === 0) {
// $this->info("Syncing opportunity {$i}");
$this->info("Matching contact {$i}");
// }
// $crmService->syncOpportunity('374720564');
$crmService->matchByName('Robot');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":4,"bounds":{"left":0.5475399,"top":0.0726257,"width":0.44082448,"height":0.9066241},"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.19952115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.5043218,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 10; $i++) {\n// if ($i % 25 === 0) {\n// $this->info(\"Syncing opportunity {$i}\");\n $this->info(\"Matching contact {$i}\");\n// }\n// $crmService->syncOpportunity('374720564');\n $crmService->matchByName('Robot');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1037118346694824136
|
-5620075945515192949
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
5
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 10; $i++) {
// if ($i % 25 === 0) {
// $this->info("Syncing opportunity {$i}");
$this->info("Matching contact {$i}");
// }
// $crmService->syncOpportunity('374720564');
$crmService->matchByName('Robot');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3951
|
NULL
|
NULL
|
NULL
|
|
3968
|
142
|
23
|
2026-05-07T12:52:53.546674+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158373546_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"43","depth":4,"bounds":{"left":0.96210104,"top":0.07581804,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}","depth":4,"bounds":{"left":0.5475399,"top":0.0726257,"width":0.4524601,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.19952115,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1200782493859903894
|
6666989733802543220
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3967
|
NULL
|
NULL
|
NULL
|
|
4042
|
143
|
24
|
2026-05-07T12:58:25.319620+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158705319_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpallLukas/Stefka 121 - in 1h 32mLA100% <78Thu 7 May 15:58:27DEV (docker)T₴1DOCKERDEV (docker)882APP (-zsh)jiminny-worker-processing-2:j1minny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debugMatchingcontact o-zsh• 84|screenpipe*•$5-zsh₴6DEVSevenShores\Hubspot\Exceptions\BadRequestClient error:*POST [URL_WITH_CREDENTIALS] ]...
|
NULL
|
6327279596783760780
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpallLukas/Stefka 121 - in 1h 32mLA100% <78Thu 7 May 15:58:27DEV (docker)T₴1DOCKERDEV (docker)882APP (-zsh)jiminny-worker-processing-2:j1minny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debugMatchingcontact o-zsh• 84|screenpipe*•$5-zsh₴6DEVSevenShores\Hubspot\Exceptions\BadRequestClient error:*POST [URL_WITH_CREDENTIALS] ]...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
4043
|
144
|
24
|
2026-05-07T12:58:26.628556+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158706628_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-943456739835505562
|
-8636494053633454656
|
visual_change
|
hybrid
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
PhostormProiectVIewINavigareCodeLaravelKeractorWindowFV faVsco.js°9 master kRematchActivityOnCrmObjectDetach.php© RateLimitException.php© PaginationConfig.phpT IntegrationApp/../SyncCrmEntitiesTrait.php# composer.isonOpportunitySyncTrait.php© WebhookScomposer.lockdenendencv-checker.isonT ImportBatchJobTrait.php© Hubspot/service.phgdevisonE ids.txt=infection.ison.dist( Hubspot/.../SyncCrmEntitiesTrait.phpuservicelnterace.onoclass HubspotPaq1nat1onServicem 01 A18 ^ v 315M-INSTALLmdpublic function getPaginatedbatabeneratorMIINTERNAL WEBHOOK SETUP.|//316317=iminny storaddM_llicenses.moM MakefileJ package-lock.jsonE phpstan.neon.distE phpstan-baseline.neon<> phpunit.xmlTaraw_sqL_query.sqMIDSANMS md< sonar-project.propertiesEtest.py‹> Untitled Diagram.xmlJs vetur.confia.isM+ WEBHOOK FILTERING_IMPLEM› ih External Librariesv EScratches and Consolesv _ Darabase consolesVLEU¿ console (EUlIA DEAL RISKS (EUTADITEUIAEU TEUTv / liminnv@llocalhostIconsole fliminnvalocalho# Di lfiminnv@localhostll# HS local fiminnv@localhd… SE fliminnv@localhostlA zoho_dev fiminny@locallv ApRODA console [PROD]# concolo 1 ropOn1A DI [PRODI> AQA> AQAi> A QAI PRODV A STAGING& console SIAGING& console SIAGING¿ uranus ISTAGING1> D Extensions.> M Scratchessch1s-> Lograganacionrrogress sscace, sceamto, senapolnc} while (Sstate->offset && ! empty(Spage['results'])):I| Log final pagination completion stats— 319326Sthis->loqger->info( Hubspoti Paqination completed'. "'endpoint' => Sendpoint.322— 323324total records fetched' => Sstate-›totalRecords.'total_elapsed_seconds" => round(Sstate->getelapsedSeconds), pr'avenane seconds nen nenuest' => Sstate->nenuestCount> 02 noundd num: Sstate->aetFlansedSecondsO/ Sstate->nenuestCountprecision: 20 : 0326327/ Update reference parametersStotal = Sctate-stotal•Slas+Recondid = Sstate->lastRecondtd.no usagesprivate function shouldStopPagination(PaginationState $state, int SteamId): boolif (Sstate->hasReachedSafetyLimit) {Sthis->logger->warning('[Hubspot] Reached maximum request limit during pagination'. [cean 10' => sceanla'safety limit' => PaginationConfiq::L00P SAFETY LIMIT.'total tetched => sstate-›totalrecordsD:return falsesorivate function handlePaginationStrateavaarnav Snavilnad.353— 354array $defaultFilter,PaginationState $state,int Srosul+cPenPage..int Steamtd): array {if (Sthis->shouldSwitchToKeysetPagination(Sstate, SresultsPerPage)) {Cnavlondrifiltoncil = Cdofaul+Cilton.arAuhe foa ids suadestiionsa Detect more secwritvlissues lin vour D!Dfflles //lTin SonarAube Cloud for free //lDownload SonarOmbe Server Illear more //lDonit ask adain /itodav 105251• Lukas sterka 121 • In 1h 32mThu 7 May 15:58:28SF fiiminnv@localhostHS_local (jiminny@localhost]iii accounts [jiminny@localhost]& console [PROD)&console fEul& console [STAGING](2026-05-07 12:50:551 Local.INFU: Lencryptedionentanagenoeneratingaccess toien.1mode'legacyiconrelation-ide ene-44-4--е 16enmuwnerkeso ven sntedation ownen mat Ched as RiUwne McoNOv GenwrnUaSiD ree en OwIleMr CAoP eaTG MHYAC NCONeIE[HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea" , "trace ®Hubspor Paginatiion comolleted ueam Glreendinonni rh io sa laoruhubaon com enm asyoinecis ceals/ seanch" "toial nequesis ronotalenLocal.INFO: [SyncHubspot0bjects) Sync finished 1"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider": "hubspot", "status":"completed", "duration_mLOCAW KRIRA iminy Services crm Hubspor Pacinat on Wuospot Paginata onservilceraqet Paginat eddar adenenatonOP Return value must be of tyoe denenationstacktracel#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny(Services(Crm Hubspotl PaginationHubspotPaginationService->getPaginatedDataGenerator(Object(Jiminn#1/home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny(Services(CrmHubspot\(Client->getPaginatedDataGenerator(Arr#2/home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny|Services\\CrmHubspotlOpportunitySyncStrategy\HubspotSyncStrategyBase->#3/home/jiminny/app/Jobs/Crm/SyncHubspot0bjects.php(118): Jiminny\\Services\\Crm\\Hubspot\\Service->sync0pportunities(Array)#4 /home/jiminny/app/Jobs/Crm/SyncHubspot0bjects.php(86): JiminnyJobs|\Crm|SyncHubspot0bjects->syncHubspotCrm0bjects(0bject(Jiminny|Services\\Crm\Hubspot||Service)#5/home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny|Jobs\\Crm\|SyncHubspot0bjects->handle(Object(JiminnyServices|ResolveT#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}Oamonkeed/Illuminato Contaiines/RoundMothodnhn 0b TlluminatoContaines Utll unwoan Ledlasune baiect aasunolh#8 /home/jiminny/vendor/laravel/frawork/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container|\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation#9 /home/jiminny/vendor/laravel/framWOnk AsINc/ omanacer concarnen oncatnena on u var htcton na ceaa conca ner a boundnecnooca ua uorlectleittom na celt houndac on tApоeиcacLOwork/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\Container\Container->call(Array)#11 /home/jiminnywork/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate(Bus\Dispatcher->Illuminate(Bus\{closure}(Object(Jiminny(Jobs\Crm\Vwork/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\(Pipeline->Illuminate\(Pipeline\\{closure}(0bject(Jiminny\|Job#1S/nomeJ1minny vendor/ Laravel/travork/src/1Lluminate bus/Dispatcher.onp 155: 1lluminate PipelinePipeline->then Ubnect Closure))work/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\Bus\\Dispatcher->dispatchNow(0bject(Jiminny\|Jobs\\Crm||SyncHubsp#15 /home/jiminnvVOrKTSEc/uuumnaterPapelnezPapelane oho eworuumnat e oueve acalquevecianouer→uumnate uueve aicLosune a wolect Faminnyal#16work/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\(Pipeline->Illuminate|\Pipeline|\{closure}(0bject(Jiminny|\Job#17 home/niminny vendor/Lanvork/src/Tluminate Queve/Cal. QueuedHandLer.ono (129): TlLuminatePinelinePineline->then Obiect (Closure))#18work/src/Illuminate/dueue/CallQueuedHandLer.php(70): Illuminate\\Queue\\CallQueuedHandler->dispatchThroughMiddLeware(Object(Illumin#19 home/Timinny Awork/sec/@lluminateQueue/Nobs/Nob.oho (02): #lLuminate Queve Calz QueuediandLen->call (Obnect OlLuminate Queue Nobs Redis Job)L#20/home/jiminny/app/Queue/Worker/Worker.php(71): Illuminatel\Queuel\Jobs|\Job->fire()Zhomer aaminny/ vendor anavel inamework7sec/ at u luminat e/ oueue/ Von ker-oho C4s9F aminy Woueue Worken aWonken->onocess unecnst Obnectiotuuminate toueue Iwoos WRechsuo#22/home/jiminny/vendor/Laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\Queue\\Worker->runJob(Object(Illuminate\\Queue|\Jobs\\RedisJob),'redis', ObGinamewonklsec/ aal luminate oueue/consol le/Won kkommand lnhoi & 24:0 R a l lrum nate avomene a Worken-Taemon anernist Maom-synen com-inous 0nlec 8ul#24/home/jiminny/vendor/Laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate|\Queue\\Console\\WorkCommand->runWorker('redis',Thome/GGimiinny//vendor/laravellfcamewockTscc/ibluminate/ontaiiner/BoundMethod.nhn/k10=hluminatelIoueuelITonsollellWorkkommand=>handilel@#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closurerO#27/home/E6imsinny//vendor/hlacavelticameworkTscc/ihluminate//Contaiiner/BoundMethod.ohn/@79FhlumnatelIontarnenTWitahaunweanLiMlosune/bileatalosuneD#28/home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminatel\ContainerBoundMethod::callBoundMethod(Object(IlluminatelFoundatioww:ome/EEmnnw//Vendod/Alacave WEisamewod 7acc/ihlm.inate//ontanea//ontatines.nho/609)-hMm.inatellWontalnealRoundMethodDacallChGlect/dihltmnatelaoundatE/0nlVAnnElcatE#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\Container\\Container->call(Array)#31/home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminatel|Consolel|Command->execute(Obiect(SymfonyComponent\(Consolel\Input|\ArgvInput), Object(Il#32/home/jiminny/vendor/Laravel/framework/src/Illuminate/Console/Command.php(180): SymfonyComponent||Consolel|Command\|Command->run(Object(Symfony|Componentl|Console#33/home/jiminny/vendor/symfony/console/Application.php(1117): Illuminatel|Consolel|Command->run(Obiect (Symfony\Component\\Consolel|Input\\ArgvInput), Obiect (Symfony\l#34/home/jiminny/vendor/symfony/console/Application.php(356): Symfony|Component||ConsolelApplication->doRunCommand(Object(Illuminatel(Queuel|Consolel|WorkCommand), Ob#35/home/jiminny/vendor/symfony/console/Application.php (195): Symfony|Component||ConsolellApplication->doRun(0bject(Symfony\Component|\Consolel|InputllArgvInput), Obr#36/home/jiminny/vendor/Laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): SymfonyComponent||ConsolellApplication->run(Object(Symfonyl|Componentl|Co#37 /home/iiminny//vendor/anavel/fnamework/scc/Tlluminate/Eoundation/Anplication.php(1235):_T11uminatel|FoundationlConsolel|Kennel->handleCObiect(Svmfonv/Componenti1Co#38 /home/jiminny/artisan(13): Illuminatel\Foundation|\Application->handleCommand(Obiect(Symfony\\Component|\Consolel|Inoutl\ArgvInput))#39 {main}"} {"correlation id"."eb2b7ebe-9423-4dbc-a38b-e01816fd6aeq" "trace_id". "ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}[2026-05-07 12:57:061 local.INF0: Jiminnv Console Commands\Command::run Memory usage before starting command {"command"."meeting-bot:schedule-bot" "merryBeforecommandin[2026-05-07 12:57:061 local.INF0:[ScheduleBotCommandl Number of activities to be captured: 0 {"correlation_id"."854299be-d77a-48bc-870c-b78333916d69" "trace_id" • "89c1e[2026-05-07 12:57:06] Local.INF0: Jiminny\Console\Commands\Command::run Memory usage for command {"command" : "meeting-bot: schedule-bot" , "memoryBeforeCommandInMb" :62.0, "me[2026-05-07 12-57-161 1000L TNE0: Jiminnvl Consolel Commandsl Command:acun Memocy usage befoce stanting command "command" . "diallensamoniton-activities" "memoryRefonefommandW Windsurf Teams 1:1 UTF-8io 4 spaces...
|
4041
|
NULL
|
NULL
|
NULL
|
|
4044
|
144
|
25
|
2026-05-07T12:58:34.255687+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158714255_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
306
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.55,"average_seconds_per_request":0.55} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring start {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.51,"average_seconds_per_request":0.51} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring end {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.62,"average_seconds_per_request":0.62} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.78,"average_seconds_per_request":0.78} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":1.21,"average_seconds_per_request":1.21} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.53,"average_seconds_per_request":0.53} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:32] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"92242bd6-7014-4487-a50b-1570e1a88e7a","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring start {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring end {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring start {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring end {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"825ef2d7-b5f8-45cd-b19d-20a179b06934","trace_id":"5825a6c8-14c9-4bec-b688-d4895cfc41cc"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring start {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring end {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:50","to":"12:55"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:45","to":"02:50"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:57:40.609671Z"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring start {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring end {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":57,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":238.3,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"306","depth":4,"bounds":{"left":0.95977396,"top":0.07581804,"width":0.012632979,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring start {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring end {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring start {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring end {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"825ef2d7-b5f8-45cd-b19d-20a179b06934\",\"trace_id\":\"5825a6c8-14c9-4bec-b688-d4895cfc41cc\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:50\",\"to\":\"12:55\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:45\",\"to\":\"02:50\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:57:40.609671Z\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring start {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring end {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":238.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:50] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":37119,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"902cef33-4733-4b2a-9693-affb8645cecc\",\"trace_id\":\"4ffe2bb8-67c6-422a-a846-319973cc0259\"}\n[2026-05-07 12:56:50] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23195976,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.3,\"average_seconds_per_request\":0} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1854.64,\"usage\":24199288,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25235152,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":70.53,\"usage\":25225384,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25263936,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":47.7,\"usage\":25451952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25490320,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":44.12,\"usage\":25547952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25587032,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":412.19,\"usage\":25739960,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25172624,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":291.83,\"usage\":25225088,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:54] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring start {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring end {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:28] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"c296bf83-9f7c-4228-b6f5-99db6040fa01\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.ERROR: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n {\"exception\":\"[object] (SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(125): SevenShores\\\\Hubspot\\\\Exceptions\\\\HubspotException::create(Object(GuzzleHttp\\\\Exception\\\\ClientException))\n#1 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#2 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#3 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#4 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#5 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#6 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#7 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#14 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#16 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#21 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#22 {main}\n\n[previous exception] [object] (GuzzleHttp\\\\Exception\\\\ClientException(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:111)\n[stacktrace]\n#0 /home/jiminny/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\\\Exception\\\\RequestException::create(Object(GuzzleHttp\\\\Psr7\\\\Request), Object(GuzzleHttp\\\\Psr7\\\\Response), NULL, Array, NULL)\n#1 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\\\Middleware::GuzzleHttp\\\\{closure}(Object(GuzzleHttp\\\\Psr7\\\\Response))\n#2 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\\\Promise\\\\Promise::callHandler(1, Object(GuzzleHttp\\\\Psr7\\\\Response), NULL)\n#3 /home/jiminny/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\\\Promise\\\\Promise::GuzzleHttp\\\\Promise\\\\{closure}()\n#4 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\\\Promise\\\\TaskQueue->run(true)\n#5 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitFn()\n#6 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#7 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitList()\n#8 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#9 /home/jiminny/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\\\Promise\\\\Promise->wait()\n#10 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(113): GuzzleHttp\\\\Client->request('POST', 'https://api.hub...', Array)\n#11 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#12 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#13 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#14 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#15 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#16 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#17 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#24 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#26 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#27 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#28 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#31 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#32 {main}\n\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring start {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring end {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring start {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring end {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring start {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring end {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"825ef2d7-b5f8-45cd-b19d-20a179b06934\",\"trace_id\":\"5825a6c8-14c9-4bec-b688-d4895cfc41cc\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:50\",\"to\":\"12:55\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:45\",\"to\":\"02:50\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:57:40.609671Z\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring start {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring end {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":238.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:50] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":37119,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"902cef33-4733-4b2a-9693-affb8645cecc\",\"trace_id\":\"4ffe2bb8-67c6-422a-a846-319973cc0259\"}\n[2026-05-07 12:56:50] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23195976,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.3,\"average_seconds_per_request\":0} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1854.64,\"usage\":24199288,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25235152,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":70.53,\"usage\":25225384,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25263936,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":47.7,\"usage\":25451952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25490320,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":44.12,\"usage\":25547952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25587032,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":412.19,\"usage\":25739960,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25172624,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":291.83,\"usage\":25225088,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:54] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring start {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring end {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:28] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"c296bf83-9f7c-4228-b6f5-99db6040fa01\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.ERROR: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n {\"exception\":\"[object] (SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(125): SevenShores\\\\Hubspot\\\\Exceptions\\\\HubspotException::create(Object(GuzzleHttp\\\\Exception\\\\ClientException))\n#1 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#2 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#3 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#4 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#5 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#6 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#7 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#14 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#16 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#21 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#22 {main}\n\n[previous exception] [object] (GuzzleHttp\\\\Exception\\\\ClientException(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:111)\n[stacktrace]\n#0 /home/jiminny/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\\\Exception\\\\RequestException::create(Object(GuzzleHttp\\\\Psr7\\\\Request), Object(GuzzleHttp\\\\Psr7\\\\Response), NULL, Array, NULL)\n#1 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\\\Middleware::GuzzleHttp\\\\{closure}(Object(GuzzleHttp\\\\Psr7\\\\Response))\n#2 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\\\Promise\\\\Promise::callHandler(1, Object(GuzzleHttp\\\\Psr7\\\\Response), NULL)\n#3 /home/jiminny/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\\\Promise\\\\Promise::GuzzleHttp\\\\Promise\\\\{closure}()\n#4 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\\\Promise\\\\TaskQueue->run(true)\n#5 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitFn()\n#6 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#7 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitList()\n#8 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#9 /home/jiminny/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\\\Promise\\\\Promise->wait()\n#10 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(113): GuzzleHttp\\\\Client->request('POST', 'https://api.hub...', Array)\n#11 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#12 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#13 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#14 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#15 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#16 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#17 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#24 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#26 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#27 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#28 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#31 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#32 {main}\n\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring start {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring end {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.49335107,"top":0.17478053,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"18","depth":4,"bounds":{"left":0.50265956,"top":0.17478053,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n// if ($this->shouldStopPagination($state, $teamId)) {\n// break;\n// }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n// $this->validateTokenIfNeeded($client, $state);\n// usleep($delay);\n\n $page = $this->executeSearchRequest($client, $endpoint, $payload, $state);\n\n// $state->setTotal($page['total'] ?? 0);\n// $this->updateLastRecordId($page, $state);\n//\n// // Safely iterate over results with null check\n// $results = $page['results'] ?? [];\n// foreach ($results as $row) {\n// $state->incrementTotalRecords();\n// yield $row;\n// }\n//\n// $state->setOffset($this->getNextOffset($page));\n// $state->incrementRequestCount();\n//\n// $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $endpoint, array $payload, PaginationState $state): array\n {\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $response->toArray();\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n } else {\n throw $e;\n }\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n// if ($this->shouldStopPagination($state, $teamId)) {\n// break;\n// }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n// $this->validateTokenIfNeeded($client, $state);\n// usleep($delay);\n\n $page = $this->executeSearchRequest($client, $endpoint, $payload, $state);\n\n// $state->setTotal($page['total'] ?? 0);\n// $this->updateLastRecordId($page, $state);\n//\n// // Safely iterate over results with null check\n// $results = $page['results'] ?? [];\n// foreach ($results as $row) {\n// $state->incrementTotalRecords();\n// yield $row;\n// }\n//\n// $state->setOffset($this->getNextOffset($page));\n// $state->incrementRequestCount();\n//\n// $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $endpoint, array $payload, PaginationState $state): array\n {\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $response->toArray();\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n } else {\n throw $e;\n }\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3236119539495722196
|
6701901348364979261
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
306
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.55,"average_seconds_per_request":0.55} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring start {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.51,"average_seconds_per_request":0.51} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring end {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.62,"average_seconds_per_request":0.62} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.78,"average_seconds_per_request":0.78} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":1.21,"average_seconds_per_request":1.21} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.53,"average_seconds_per_request":0.53} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:32] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"92242bd6-7014-4487-a50b-1570e1a88e7a","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring start {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring end {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring start {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring end {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"825ef2d7-b5f8-45cd-b19d-20a179b06934","trace_id":"5825a6c8-14c9-4bec-b688-d4895cfc41cc"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring start {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring end {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:50","to":"12:55"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:45","to":"02:50"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:57:40.609671Z"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring start {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring end {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":57,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":238.3,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
4045
|
143
|
25
|
2026-05-07T12:58:35.749233+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158715749_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-943456739835505562
|
-8636494053633454656
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
iTerm2ShellEditViewSessionScriptsProfilesWindowHelpallLukas/Stefka 121 - in 1h 32m100% <78Thu 7 May 15:58:36DEV (docker)T81DOCKERO 81DEV (docker)882APP (-zsh)jiminny-worker-processing-2:j1minny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debugMatchingcontact 0-zsh• 84screenpipe*•$5-zsh₴6DEVSevenShores\Hubspot\Exceptions\BadRequestClient error: *POST [URL_WITH_CREDENTIALS] ]...
|
4042
|
NULL
|
NULL
|
NULL
|
|
4046
|
144
|
26
|
2026-05-07T12:58:47.218731+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158727218_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavigareCodeLaravelKeractorFV faVsco. PhostormVIewINavigareCodeLaravelKeractorFV faVsco.js°9 master kProiect vRematchActivityOnCrmObjectDetach.php© RateLimitException.php= custom.log© PaginationConfig.phpT IntegrationApp/../SyncCrmEntitiesTrait.php= nuospor-lournal-poll.logOpportunitySyncTrait.ph<)> phpunit.xmlos ttt.jsE oauth-private.keyT ImportBatchJobTrait.php© Hubspot/service.phg( Hubspot/.../SyncCrmEntitiesTrait.phpuservicelnterace.onoE oauth-public.keyE storageE supervisord.pidclass HubspotPaqlnat1onServicepublic function getPaginatedbatabenerator|//text-relav.isonv w tests> Featurelintearationa Servicesv UniN ComoonentiM ConcoleiM ContractsM DomainD EnumsD EventsD ExceptionsuuixturesD GuardsC HttpC Interactionsw Jobs>@ Activitv0 AiAutomation> M Audiov AutomatedReportsC CreateResultsTest.C RequestGenerateA.C) RequestGenerate?C) SendRevortExoirincc) SendRenert loblies( SendRenortMail.lohC) SendRenortNotGenTM Calendar• MCrmTM DealPicks• M MailboyStreamingD TeamM Tolonhanv• Mllsorsch1s-> Lograganacionrrogress sscace, sceamto, senapolnt} while (Sstate->offset && ! empty(Spage['results'])):II Log final pagination completion statsSthis->loqger->info( Hubspot Paqination completed'. "'endpoint' => Sendpoint.total records fetched' => Sstate-›totalRecords'total_elapsed_seconds" => round(Sstate->getelapsedSeconds), pr'avenane seconds nen nenuest' => Sstate->nenuestCount> 02 noundd num: Sstate->aetFlansedSecondsO/ Sstate->nenuestCountprecision: 20 : 0/ Update reference parametersStotal = Sctate-stotal•Slas+Recondid = Sstate->lastRecondtd.no usagesprivate function shouldStopPagination(PaginationState $state, int $teamId): boolif (Sstate->hasReachedSafetyLimit) {Sthis->logger->warning('[Hubspot] Reached maximum request limit during pagination', [cean 10' => sceanla'safety limit' => PaginationConfiq::L00P SAFETY LIMIT.'total tetched => sstate-›totalrecordsreturn falses1usageorivate function handlePaginationStrateavaPaginationState $state,int Srosul+cPenPage..int Steamtd): array {if (Sthis->shouldSwitchToKeysetPagination(Sstate, SresultsPerPage)) {ortDocollAlDocordi 10%Cnavlondrifiltoncil = Cdofaul+Cilton.SonarAube for ldls suadestiionsa Detect more seamitvlissueslin vour D.D flles /ltn SonarAube Claud for free //lDownload SonarOnbe Server lllearn more //lDonit ask again /(todav 10:251Lukas/Stefka 121 - in 1h 32 mThu 7 May 15:58:47AskJim= custom.log&console fEul34634734834901 A18 A3Й887338=55.3601361362_ « SF [jiminny@localhost]A HS_local [jiminny@localhost]iii accounts [jiminny@localhost]& console [PROD)& console [STAGING]#28 /home/Jiminny/vendor/Laravel/framework/src/Illuminate/Container/BoundMethod.php(35): IlLuminate\\Container)\BoundMethod::calLBoundMethod(Object(Illun a~306^#29 /home/Jiminny/vendor/Laravel/framework/src/IlLuminate/Container/Container.php(799): IlLuminatel Container\BoundMethod::call(Object(Illuminate\(FoundationApplicati#310home/Timinny//vendor/Lanavel/fnamework/snc/@luminate/Console/Command.oho/v50r #lluminateContainer Container->calll Anay#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminatel|Console|Command->execute(Object(Symfony|Component (Console(Input)(Argvinput), Object(Il W#32 /home/jiminny/vendor/Laravel/framework/src/1lLuminate/Console/Command.php(180): Symfony(Componenti(Console|Command|Command->run(Object(Symfony (Componenti Console#33/home/jiminny/vendor/symfony/console/Application.php(1117): Illuminatel|Console\|Command->run(Object(Symfony|Component(Console(Input\ArgvInput), Object(Symfonyl#34/home/jiminny/vendor/symfony/console/Application.php(356): Symfony\Component|Console\Application->doRunCommand(Object(IlluminatelQueuel(Consolel|WorkCommand), Ob#35/home/jiminny/vendor/symfony/console/Application.php(195): Symfony\Component|ConsoleApplication->doRun(Object(Symfony\Component(Consolel\Inputl\ArgvInput), Obi#36/home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php (198): Symfony\Component|ConsoleApplication->run(Object(SymfonyComponentlCo#37 /home/jiminny/vendor/Laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminatel\Foundation\|Console\\Kernel->handle(0bject(Symfony|\Component\\CoTlluminatoCoundationAnnlication-shandleCommand/0h.ect/CvmfonvComnonentConcoleTnnutAnavTnnut[2026-05-07 12:57:06] local.INF0: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot", "memoryBeforeCommandInJiminny lonsole commanas com[2026-05-07 12:57:16] local.INF0: Jiminny\Console\Commands\ Command: :runcommand ""Cond": "meecing-dor: schedule-bot", "memorybetorecommanainnd":o2.0rmemand {"command":"dialers:monitor-activities" "memoryBeforeCommandandInMb":62.0."2026-05-07 12:57:16]Local.LNFU: Jiminny Lonsole com12024-05-A7 12•57•191 local, NOTCE: Monztoring start2626-05-07 12:571191[2026-05-07 12:57:22][2026-05-07 12:57:221[2026-05-07 12:57:25]2826-05-07 12:57:251Local.Nulce: monntorino endJaminny Console Commands Command::run Memory usage for command *"conorvBeforecommandinMb":62.0.llEman Schedulel STARIDNG batch onocess thosia nockenlamowEuconelaionС аСА0а5180-4же-8450- с68с96669 Unaсe GAn9h2826-05-07 12-57:251a simEinny vionso leViommandsVcommandRanun Memony usade tor commandeucomman Mrmata lhoxabatichanco cessuememoey ses tо сe мотmатсв итняку потштетоLocal.INFO:12026-05-07 12-57:271lsmarh Schedulel STAR NG batch create uhostu- "ncken lamo ucoccellataion Sil-oLer056-ceah-ZoLZE8La-802Skcekea" ltnace Sol-mohhLocal. TNEO."correlation id"."c4e70056-ceab-4c44-874a-8042963ce3ea" "trace 1d"•"011)2026-05-07 12-57.271Whiminny Vonsolle Vommands Vommandeanun Memony usade for command ""command" • "marhlhoxahatchacceatie""memonvBe fonedommandiinMbl a62.o"memony[2026-05-07 12:57:28]local.INFO:2926-05-07 12•58•0671[Jiminny Jobs Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlSoalalAccnuntSenviceWdetchiind tokenUsadial Accountiil-790 lncovaldenl • Whnh snate thonne lathinn Chll -Waoe?de8hahskf8E/Vle-hhey B8VKlda:[2026-05-07 12:58:06]local.INFO:[SocialAccountService] Token retrieved {"socialAccountId":1499, "provider":"hubspot"} {"correlation_id":"a9e2de8b-b538-437e-bbe7-82636da12024-05-07 12•58•041Tocal TASO•[EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a9e2de8b-b538-437e-bbe7-82636da81995","trace_id":[2026-05-07 12:58:06] Local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"erm_provider"hubspot" "crm_owner":148,"team_id":2} {"correlation_id":"a9e[2026-05-07 12:58:06] local.ERROR: Client error:'post httne:/lani_hubanicom/com/v3/nhiectc/contact/ceanch' neculted in a '420 Too Manv Reauectcinesnonce.{"status":"error" "message":"You have reached your secondly limit." "errorType":"RATE_LIMIT" "correlationId":"019e0284-5 (truncated...){"exception":"[object] (SevenShores)\Hubspot\\Exceptions\BadRequest(code: 429): Client error:'POST https://api.hubapi.com/crm/v3/objects/contact/search* resulted in a{\"status)":"error\", \"message)":"You have reached your secondly limit.\",\"errorType)":"RATE LIMIT\", \"correlationId\":"019e0284-5 (truncated...)at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)[stacktracel#0/home/iiminny/vendor/hubspot/hubspot-php/scc/Http/Client.php(125):SevenShones|Hubspotl\Exceptions|HubsnotExcention:=cneate(0biect(GuzzleHttplExcentionMClientFxe#1/home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaqinationService.pho(163): SevenShores\Hubspot|\Http|\Client->request('POST'.". Array)#2/home/iiminny/anp/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51):JiminnyServicesl|ComlHubspot/|Pagination HubsnotPaginationService->executeSea#3/home/iiminny/app/Services/Com/Hubspot/Client.php(194): Jiminnyl|Servicesl|ComlHubsnotl|PaginationlHubsnotPaginat/onService->qetPaqinatedDataGenenator(Obiect(Jiminn#4/home/jiminny/app/Services/Crm/Hubspot/CLient.php(175): Jiminnv|(Services|\Crm|\Hubspot|\Client->qetPaqinatedDataGenerator(Array.'contact'. 0. 0. NULL)#5 home/11minny/lapo/Services/com/Hubspot/Service,oho (12039: JiminnyServices com Hubspot clnent-›get Paginatedoatal Annay#6/home/iiminnv/ano/Console/Commands/.JiminnvDebuqCommandl.ohn(353):Jiminnv||Services|\Crm|\Hubspot||Service->matchBvName('Robot')#7/home/iiminnv/ano/Console/Commands/.JiminnvDebuqCommandl.ohn(44): Jiminnv||Consolel|Commands|\JiminnvDebuaCommand->rateLimit#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny|\Console\\Commands|\JiminnyDebugCommand->handle(0bject(Jiminny\\Jobs\\JobH9home/Abiminny/vendor/lanaveEnamework7scc/uhluminate//Container/i6t.0h0/Ck9RchluminateWontainenBoundMethook.aabluminatelIcontainenlEralosunete#10/home/jiminnv/vendor/laravel/framework/src/Tlluminate/Container/BoundMethod.nhn(96): Tlluminatel|Container|\Util::unwranIfClosure(0biect(Closure))UTF-8fo 4 spaces...
|
NULL
|
2223456301603248770
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavigareCodeLaravelKeractorFV faVsco. PhostormVIewINavigareCodeLaravelKeractorFV faVsco.js°9 master kProiect vRematchActivityOnCrmObjectDetach.php© RateLimitException.php= custom.log© PaginationConfig.phpT IntegrationApp/../SyncCrmEntitiesTrait.php= nuospor-lournal-poll.logOpportunitySyncTrait.ph<)> phpunit.xmlos ttt.jsE oauth-private.keyT ImportBatchJobTrait.php© Hubspot/service.phg( Hubspot/.../SyncCrmEntitiesTrait.phpuservicelnterace.onoE oauth-public.keyE storageE supervisord.pidclass HubspotPaqlnat1onServicepublic function getPaginatedbatabenerator|//text-relav.isonv w tests> Featurelintearationa Servicesv UniN ComoonentiM ConcoleiM ContractsM DomainD EnumsD EventsD ExceptionsuuixturesD GuardsC HttpC Interactionsw Jobs>@ Activitv0 AiAutomation> M Audiov AutomatedReportsC CreateResultsTest.C RequestGenerateA.C) RequestGenerate?C) SendRevortExoirincc) SendRenert loblies( SendRenortMail.lohC) SendRenortNotGenTM Calendar• MCrmTM DealPicks• M MailboyStreamingD TeamM Tolonhanv• Mllsorsch1s-> Lograganacionrrogress sscace, sceamto, senapolnt} while (Sstate->offset && ! empty(Spage['results'])):II Log final pagination completion statsSthis->loqger->info( Hubspot Paqination completed'. "'endpoint' => Sendpoint.total records fetched' => Sstate-›totalRecords'total_elapsed_seconds" => round(Sstate->getelapsedSeconds), pr'avenane seconds nen nenuest' => Sstate->nenuestCount> 02 noundd num: Sstate->aetFlansedSecondsO/ Sstate->nenuestCountprecision: 20 : 0/ Update reference parametersStotal = Sctate-stotal•Slas+Recondid = Sstate->lastRecondtd.no usagesprivate function shouldStopPagination(PaginationState $state, int $teamId): boolif (Sstate->hasReachedSafetyLimit) {Sthis->logger->warning('[Hubspot] Reached maximum request limit during pagination', [cean 10' => sceanla'safety limit' => PaginationConfiq::L00P SAFETY LIMIT.'total tetched => sstate-›totalrecordsreturn falses1usageorivate function handlePaginationStrateavaPaginationState $state,int Srosul+cPenPage..int Steamtd): array {if (Sthis->shouldSwitchToKeysetPagination(Sstate, SresultsPerPage)) {ortDocollAlDocordi 10%Cnavlondrifiltoncil = Cdofaul+Cilton.SonarAube for ldls suadestiionsa Detect more seamitvlissueslin vour D.D flles /ltn SonarAube Claud for free //lDownload SonarOnbe Server lllearn more //lDonit ask again /(todav 10:251Lukas/Stefka 121 - in 1h 32 mThu 7 May 15:58:47AskJim= custom.log&console fEul34634734834901 A18 A3Й887338=55.3601361362_ « SF [jiminny@localhost]A HS_local [jiminny@localhost]iii accounts [jiminny@localhost]& console [PROD)& console [STAGING]#28 /home/Jiminny/vendor/Laravel/framework/src/Illuminate/Container/BoundMethod.php(35): IlLuminate\\Container)\BoundMethod::calLBoundMethod(Object(Illun a~306^#29 /home/Jiminny/vendor/Laravel/framework/src/IlLuminate/Container/Container.php(799): IlLuminatel Container\BoundMethod::call(Object(Illuminate\(FoundationApplicati#310home/Timinny//vendor/Lanavel/fnamework/snc/@luminate/Console/Command.oho/v50r #lluminateContainer Container->calll Anay#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminatel|Console|Command->execute(Object(Symfony|Component (Console(Input)(Argvinput), Object(Il W#32 /home/jiminny/vendor/Laravel/framework/src/1lLuminate/Console/Command.php(180): Symfony(Componenti(Console|Command|Command->run(Object(Symfony (Componenti Console#33/home/jiminny/vendor/symfony/console/Application.php(1117): Illuminatel|Console\|Command->run(Object(Symfony|Component(Console(Input\ArgvInput), Object(Symfonyl#34/home/jiminny/vendor/symfony/console/Application.php(356): Symfony\Component|Console\Application->doRunCommand(Object(IlluminatelQueuel(Consolel|WorkCommand), Ob#35/home/jiminny/vendor/symfony/console/Application.php(195): Symfony\Component|ConsoleApplication->doRun(Object(Symfony\Component(Consolel\Inputl\ArgvInput), Obi#36/home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php (198): Symfony\Component|ConsoleApplication->run(Object(SymfonyComponentlCo#37 /home/jiminny/vendor/Laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminatel\Foundation\|Console\\Kernel->handle(0bject(Symfony|\Component\\CoTlluminatoCoundationAnnlication-shandleCommand/0h.ect/CvmfonvComnonentConcoleTnnutAnavTnnut[2026-05-07 12:57:06] local.INF0: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot", "memoryBeforeCommandInJiminny lonsole commanas com[2026-05-07 12:57:16] local.INF0: Jiminny\Console\Commands\ Command: :runcommand ""Cond": "meecing-dor: schedule-bot", "memorybetorecommanainnd":o2.0rmemand {"command":"dialers:monitor-activities" "memoryBeforeCommandandInMb":62.0."2026-05-07 12:57:16]Local.LNFU: Jiminny Lonsole com12024-05-A7 12•57•191 local, NOTCE: Monztoring start2626-05-07 12:571191[2026-05-07 12:57:22][2026-05-07 12:57:221[2026-05-07 12:57:25]2826-05-07 12:57:251Local.Nulce: monntorino endJaminny Console Commands Command::run Memory usage for command *"conorvBeforecommandinMb":62.0.llEman Schedulel STARIDNG batch onocess thosia nockenlamowEuconelaionС аСА0а5180-4же-8450- с68с96669 Unaсe GAn9h2826-05-07 12-57:251a simEinny vionso leViommandsVcommandRanun Memony usade tor commandeucomman Mrmata lhoxabatichanco cessuememoey ses tо сe мотmатсв итняку потштетоLocal.INFO:12026-05-07 12-57:271lsmarh Schedulel STAR NG batch create uhostu- "ncken lamo ucoccellataion Sil-oLer056-ceah-ZoLZE8La-802Skcekea" ltnace Sol-mohhLocal. TNEO."correlation id"."c4e70056-ceab-4c44-874a-8042963ce3ea" "trace 1d"•"011)2026-05-07 12-57.271Whiminny Vonsolle Vommands Vommandeanun Memony usade for command ""command" • "marhlhoxahatchacceatie""memonvBe fonedommandiinMbl a62.o"memony[2026-05-07 12:57:28]local.INFO:2926-05-07 12•58•0671[Jiminny Jobs Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlSoalalAccnuntSenviceWdetchiind tokenUsadial Accountiil-790 lncovaldenl • Whnh snate thonne lathinn Chll -Waoe?de8hahskf8E/Vle-hhey B8VKlda:[2026-05-07 12:58:06]local.INFO:[SocialAccountService] Token retrieved {"socialAccountId":1499, "provider":"hubspot"} {"correlation_id":"a9e2de8b-b538-437e-bbe7-82636da12024-05-07 12•58•041Tocal TASO•[EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a9e2de8b-b538-437e-bbe7-82636da81995","trace_id":[2026-05-07 12:58:06] Local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"erm_provider"hubspot" "crm_owner":148,"team_id":2} {"correlation_id":"a9e[2026-05-07 12:58:06] local.ERROR: Client error:'post httne:/lani_hubanicom/com/v3/nhiectc/contact/ceanch' neculted in a '420 Too Manv Reauectcinesnonce.{"status":"error" "message":"You have reached your secondly limit." "errorType":"RATE_LIMIT" "correlationId":"019e0284-5 (truncated...){"exception":"[object] (SevenShores)\Hubspot\\Exceptions\BadRequest(code: 429): Client error:'POST https://api.hubapi.com/crm/v3/objects/contact/search* resulted in a{\"status)":"error\", \"message)":"You have reached your secondly limit.\",\"errorType)":"RATE LIMIT\", \"correlationId\":"019e0284-5 (truncated...)at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)[stacktracel#0/home/iiminny/vendor/hubspot/hubspot-php/scc/Http/Client.php(125):SevenShones|Hubspotl\Exceptions|HubsnotExcention:=cneate(0biect(GuzzleHttplExcentionMClientFxe#1/home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaqinationService.pho(163): SevenShores\Hubspot|\Http|\Client->request('POST'.". Array)#2/home/iiminny/anp/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51):JiminnyServicesl|ComlHubspot/|Pagination HubsnotPaginationService->executeSea#3/home/iiminny/app/Services/Com/Hubspot/Client.php(194): Jiminnyl|Servicesl|ComlHubsnotl|PaginationlHubsnotPaginat/onService->qetPaqinatedDataGenenator(Obiect(Jiminn#4/home/jiminny/app/Services/Crm/Hubspot/CLient.php(175): Jiminnv|(Services|\Crm|\Hubspot|\Client->qetPaqinatedDataGenerator(Array.'contact'. 0. 0. NULL)#5 home/11minny/lapo/Services/com/Hubspot/Service,oho (12039: JiminnyServices com Hubspot clnent-›get Paginatedoatal Annay#6/home/iiminnv/ano/Console/Commands/.JiminnvDebuqCommandl.ohn(353):Jiminnv||Services|\Crm|\Hubspot||Service->matchBvName('Robot')#7/home/iiminnv/ano/Console/Commands/.JiminnvDebuqCommandl.ohn(44): Jiminnv||Consolel|Commands|\JiminnvDebuaCommand->rateLimit#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny|\Console\\Commands|\JiminnyDebugCommand->handle(0bject(Jiminny\\Jobs\\JobH9home/Abiminny/vendor/lanaveEnamework7scc/uhluminate//Container/i6t.0h0/Ck9RchluminateWontainenBoundMethook.aabluminatelIcontainenlEralosunete#10/home/jiminnv/vendor/laravel/framework/src/Tlluminate/Container/BoundMethod.nhn(96): Tlluminatel|Container|\Util::unwranIfClosure(0biect(Closure))UTF-8fo 4 spaces...
|
4044
|
NULL
|
NULL
|
NULL
|
|
4047
|
143
|
26
|
2026-05-07T12:58:47.302604+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158727302_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5222591262487654398
|
-8636637129462003327
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
iTerm2ShellEditViewSessionScriptsProfilesWindowHelpallLukas/Stefka 121 - in 1h 32m100% <78Thu 7 May 15:58:48DEV (docker)T81DOCKERO ₴1DEV (docker)882APP (-zsh)jiminny-worker-processing-2:j1minny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debugMatchingcontact o-zsh• 84|screenpipe*•₴5-zsh₴6DEVSevenShores\Hubspot\Exceptions\BadRequestClient error:*POST [URL_WITH_CREDENTIALS] ]...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
4054
|
143
|
30
|
2026-05-07T12:59:47.987646+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158787987_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
168
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.55,"average_seconds_per_request":0.55} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring start {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.51,"average_seconds_per_request":0.51} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring end {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.62,"average_seconds_per_request":0.62} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.78,"average_seconds_per_request":0.78} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":1.21,"average_seconds_per_request":1.21} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.53,"average_seconds_per_request":0.53} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:32] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"92242bd6-7014-4487-a50b-1570e1a88e7a","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring start {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring end {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring start {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring end {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"825ef2d7-b5f8-45cd-b19d-20a179b06934","trace_id":"5825a6c8-14c9-4bec-b688-d4895cfc41cc"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring start {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring end {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:50","to":"12:55"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:45","to":"02:50"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:57:40.609671Z"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring start {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring end {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":57,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":238.3,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"168","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring start {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring end {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring start {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring end {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"825ef2d7-b5f8-45cd-b19d-20a179b06934\",\"trace_id\":\"5825a6c8-14c9-4bec-b688-d4895cfc41cc\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:50\",\"to\":\"12:55\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:45\",\"to\":\"02:50\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:57:40.609671Z\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring start {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring end {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":238.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:50] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":37119,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"902cef33-4733-4b2a-9693-affb8645cecc\",\"trace_id\":\"4ffe2bb8-67c6-422a-a846-319973cc0259\"}\n[2026-05-07 12:56:50] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23195976,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.3,\"average_seconds_per_request\":0} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1854.64,\"usage\":24199288,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25235152,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":70.53,\"usage\":25225384,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25263936,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":47.7,\"usage\":25451952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25490320,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":44.12,\"usage\":25547952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25587032,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":412.19,\"usage\":25739960,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25172624,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":291.83,\"usage\":25225088,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:54] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring start {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring end {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:28] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"c296bf83-9f7c-4228-b6f5-99db6040fa01\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.ERROR: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n {\"exception\":\"[object] (SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(125): SevenShores\\\\Hubspot\\\\Exceptions\\\\HubspotException::create(Object(GuzzleHttp\\\\Exception\\\\ClientException))\n#1 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#2 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#3 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#4 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#5 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#6 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#7 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#14 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#16 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#21 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#22 {main}\n\n[previous exception] [object] (GuzzleHttp\\\\Exception\\\\ClientException(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:111)\n[stacktrace]\n#0 /home/jiminny/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\\\Exception\\\\RequestException::create(Object(GuzzleHttp\\\\Psr7\\\\Request), Object(GuzzleHttp\\\\Psr7\\\\Response), NULL, Array, NULL)\n#1 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\\\Middleware::GuzzleHttp\\\\{closure}(Object(GuzzleHttp\\\\Psr7\\\\Response))\n#2 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\\\Promise\\\\Promise::callHandler(1, Object(GuzzleHttp\\\\Psr7\\\\Response), NULL)\n#3 /home/jiminny/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\\\Promise\\\\Promise::GuzzleHttp\\\\Promise\\\\{closure}()\n#4 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\\\Promise\\\\TaskQueue->run(true)\n#5 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitFn()\n#6 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#7 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitList()\n#8 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#9 /home/jiminny/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\\\Promise\\\\Promise->wait()\n#10 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(113): GuzzleHttp\\\\Client->request('POST', 'https://api.hub...', Array)\n#11 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#12 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#13 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#14 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#15 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#16 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#17 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#24 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#26 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#27 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#28 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#31 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#32 {main}\n\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring start {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring end {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:36] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.NOTICE: Calendar sync start {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: ef9bb388-453e-4744-a2e1-95e49ced1700 Correlation ID: 3b889c73-f943-4048-ba3b-63ac50581245 Timestamp: 2026-05-07 12:58:53Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:53Z\\\",\\\"trace_id\\\":\\\"ef9bb388-453e-4744-a2e1-95e49ced1700\\\",\\\"correlation_id\\\":\\\"3b889c73-f943-4048-ba3b-63ac50581245\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0b8181c0-c858-4d17-af69-c23b7f5a0a00 Correlation ID: 2ce9e931-f423-4048-b1d7-ae1910cd4834 Timestamp: 2026-05-07 12:58:54Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:54Z\\\",\\\"trace_id\\\":\\\"0b8181c0-c858-4d17-af69-c23b7f5a0a00\\\",\\\"correlation_id\\\":\\\"2ce9e931-f423-4048-b1d7-ae1910cd4834\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 4f38b1ca-479e-445c-8db5-29366d0a0c00 Correlation ID: d0a4d623-1a23-4fcc-aebf-ccafeed44a92 Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"4f38b1ca-479e-445c-8db5-29366d0a0c00\\\",\\\"correlation_id\\\":\\\"d0a4d623-1a23-4fcc-aebf-ccafeed44a92\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1791a948-a974-424b-9246-7fedfa913b00 Correlation ID: b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"1791a948-a974-424b-9246-7fedfa913b00\\\",\\\"correlation_id\\\":\\\"b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be27598-8820-475c-b6ca-a30513720c00 Correlation ID: d3ed2a98-4aa9-4a63-819b-d36fd20b8d62 Timestamp: 2026-05-07 12:58:57Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:57Z\\\",\\\"trace_id\\\":\\\"2be27598-8820-475c-b6ca-a30513720c00\\\",\\\"correlation_id\\\":\\\"d3ed2a98-4aa9-4a63-819b-d36fd20b8d62\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring start {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring end {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring start {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring end {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring start {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring end {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"825ef2d7-b5f8-45cd-b19d-20a179b06934\",\"trace_id\":\"5825a6c8-14c9-4bec-b688-d4895cfc41cc\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:50\",\"to\":\"12:55\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:45\",\"to\":\"02:50\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:57:40.609671Z\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring start {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring end {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":238.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:50] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":37119,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"902cef33-4733-4b2a-9693-affb8645cecc\",\"trace_id\":\"4ffe2bb8-67c6-422a-a846-319973cc0259\"}\n[2026-05-07 12:56:50] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23195976,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.3,\"average_seconds_per_request\":0} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1854.64,\"usage\":24199288,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25235152,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":70.53,\"usage\":25225384,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25263936,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":47.7,\"usage\":25451952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25490320,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":44.12,\"usage\":25547952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25587032,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":412.19,\"usage\":25739960,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25172624,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":291.83,\"usage\":25225088,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:54] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring start {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring end {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:28] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"c296bf83-9f7c-4228-b6f5-99db6040fa01\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.ERROR: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n {\"exception\":\"[object] (SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(125): SevenShores\\\\Hubspot\\\\Exceptions\\\\HubspotException::create(Object(GuzzleHttp\\\\Exception\\\\ClientException))\n#1 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#2 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#3 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#4 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#5 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#6 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#7 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#14 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#16 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#21 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#22 {main}\n\n[previous exception] [object] (GuzzleHttp\\\\Exception\\\\ClientException(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:111)\n[stacktrace]\n#0 /home/jiminny/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\\\Exception\\\\RequestException::create(Object(GuzzleHttp\\\\Psr7\\\\Request), Object(GuzzleHttp\\\\Psr7\\\\Response), NULL, Array, NULL)\n#1 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\\\Middleware::GuzzleHttp\\\\{closure}(Object(GuzzleHttp\\\\Psr7\\\\Response))\n#2 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\\\Promise\\\\Promise::callHandler(1, Object(GuzzleHttp\\\\Psr7\\\\Response), NULL)\n#3 /home/jiminny/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\\\Promise\\\\Promise::GuzzleHttp\\\\Promise\\\\{closure}()\n#4 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\\\Promise\\\\TaskQueue->run(true)\n#5 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitFn()\n#6 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#7 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitList()\n#8 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#9 /home/jiminny/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\\\Promise\\\\Promise->wait()\n#10 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(113): GuzzleHttp\\\\Client->request('POST', 'https://api.hub...', Array)\n#11 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#12 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#13 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#14 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#15 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#16 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#17 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#24 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#26 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#27 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#28 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#31 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#32 {main}\n\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring start {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring end {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:36] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.NOTICE: Calendar sync start {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: ef9bb388-453e-4744-a2e1-95e49ced1700 Correlation ID: 3b889c73-f943-4048-ba3b-63ac50581245 Timestamp: 2026-05-07 12:58:53Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:53Z\\\",\\\"trace_id\\\":\\\"ef9bb388-453e-4744-a2e1-95e49ced1700\\\",\\\"correlation_id\\\":\\\"3b889c73-f943-4048-ba3b-63ac50581245\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0b8181c0-c858-4d17-af69-c23b7f5a0a00 Correlation ID: 2ce9e931-f423-4048-b1d7-ae1910cd4834 Timestamp: 2026-05-07 12:58:54Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:54Z\\\",\\\"trace_id\\\":\\\"0b8181c0-c858-4d17-af69-c23b7f5a0a00\\\",\\\"correlation_id\\\":\\\"2ce9e931-f423-4048-b1d7-ae1910cd4834\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 4f38b1ca-479e-445c-8db5-29366d0a0c00 Correlation ID: d0a4d623-1a23-4fcc-aebf-ccafeed44a92 Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"4f38b1ca-479e-445c-8db5-29366d0a0c00\\\",\\\"correlation_id\\\":\\\"d0a4d623-1a23-4fcc-aebf-ccafeed44a92\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1791a948-a974-424b-9246-7fedfa913b00 Correlation ID: b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"1791a948-a974-424b-9246-7fedfa913b00\\\",\\\"correlation_id\\\":\\\"b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be27598-8820-475c-b6ca-a30513720c00 Correlation ID: d3ed2a98-4aa9-4a63-819b-d36fd20b8d62 Timestamp: 2026-05-07 12:58:57Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:57Z\\\",\\\"trace_id\\\":\\\"2be27598-8820-475c-b6ca-a30513720c00\\\",\\\"correlation_id\\\":\\\"d3ed2a98-4aa9-4a63-819b-d36fd20b8d62\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring start {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring end {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false}]...
|
-7774041466663165407
|
6701901348398533693
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
168
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.55,"average_seconds_per_request":0.55} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring start {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.51,"average_seconds_per_request":0.51} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring end {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.62,"average_seconds_per_request":0.62} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.78,"average_seconds_per_request":0.78} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":1.21,"average_seconds_per_request":1.21} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.53,"average_seconds_per_request":0.53} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:32] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"92242bd6-7014-4487-a50b-1570e1a88e7a","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring start {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring end {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring start {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring end {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"825ef2d7-b5f8-45cd-b19d-20a179b06934","trace_id":"5825a6c8-14c9-4bec-b688-d4895cfc41cc"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring start {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring end {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:50","to":"12:55"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:45","to":"02:50"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:57:40.609671Z"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring start {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring end {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":57,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":238.3,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3...
|
4052
|
NULL
|
NULL
|
NULL
|
|
4071
|
145
|
1
|
2026-05-07T13:01:35.972874+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158895972_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
933
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.55,"average_seconds_per_request":0.55} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring start {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.51,"average_seconds_per_request":0.51} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring end {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.62,"average_seconds_per_request":0.62} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.78,"average_seconds_per_request":0.78} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":1.21,"average_seconds_per_request":1.21} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.53,"average_seconds_per_request":0.53} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:32] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"92242bd6-7014-4487-a50b-1570e1a88e7a","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring start {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring end {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring start {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring end {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"825ef2d7-b5f8-45cd-b19d-20a179b06934","trace_id":"5825a6c8-14c9-4bec-b688-d4895cfc41cc"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring start {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring end {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:50","to":"12:55"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:45","to":"02:50"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:57:40.609671Z"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring start {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring end {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":57,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":238.3,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"933","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring start {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring end {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring start {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring end {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"825ef2d7-b5f8-45cd-b19d-20a179b06934\",\"trace_id\":\"5825a6c8-14c9-4bec-b688-d4895cfc41cc\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:50\",\"to\":\"12:55\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:45\",\"to\":\"02:50\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:57:40.609671Z\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring start {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring end {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":238.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:50] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":37119,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"902cef33-4733-4b2a-9693-affb8645cecc\",\"trace_id\":\"4ffe2bb8-67c6-422a-a846-319973cc0259\"}\n[2026-05-07 12:56:50] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23195976,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.3,\"average_seconds_per_request\":0} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1854.64,\"usage\":24199288,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25235152,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":70.53,\"usage\":25225384,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25263936,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":47.7,\"usage\":25451952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25490320,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":44.12,\"usage\":25547952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25587032,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":412.19,\"usage\":25739960,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25172624,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":291.83,\"usage\":25225088,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:54] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring start {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring end {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:28] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"c296bf83-9f7c-4228-b6f5-99db6040fa01\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.ERROR: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n {\"exception\":\"[object] (SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(125): SevenShores\\\\Hubspot\\\\Exceptions\\\\HubspotException::create(Object(GuzzleHttp\\\\Exception\\\\ClientException))\n#1 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#2 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#3 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#4 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#5 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#6 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#7 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#14 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#16 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#21 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#22 {main}\n\n[previous exception] [object] (GuzzleHttp\\\\Exception\\\\ClientException(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:111)\n[stacktrace]\n#0 /home/jiminny/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\\\Exception\\\\RequestException::create(Object(GuzzleHttp\\\\Psr7\\\\Request), Object(GuzzleHttp\\\\Psr7\\\\Response), NULL, Array, NULL)\n#1 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\\\Middleware::GuzzleHttp\\\\{closure}(Object(GuzzleHttp\\\\Psr7\\\\Response))\n#2 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\\\Promise\\\\Promise::callHandler(1, Object(GuzzleHttp\\\\Psr7\\\\Response), NULL)\n#3 /home/jiminny/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\\\Promise\\\\Promise::GuzzleHttp\\\\Promise\\\\{closure}()\n#4 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\\\Promise\\\\TaskQueue->run(true)\n#5 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitFn()\n#6 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#7 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitList()\n#8 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#9 /home/jiminny/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\\\Promise\\\\Promise->wait()\n#10 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(113): GuzzleHttp\\\\Client->request('POST', 'https://api.hub...', Array)\n#11 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#12 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#13 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#14 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#15 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#16 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#17 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#24 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#26 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#27 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#28 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#31 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#32 {main}\n\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring start {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring end {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:36] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.NOTICE: Calendar sync start {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: ef9bb388-453e-4744-a2e1-95e49ced1700 Correlation ID: 3b889c73-f943-4048-ba3b-63ac50581245 Timestamp: 2026-05-07 12:58:53Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:53Z\\\",\\\"trace_id\\\":\\\"ef9bb388-453e-4744-a2e1-95e49ced1700\\\",\\\"correlation_id\\\":\\\"3b889c73-f943-4048-ba3b-63ac50581245\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0b8181c0-c858-4d17-af69-c23b7f5a0a00 Correlation ID: 2ce9e931-f423-4048-b1d7-ae1910cd4834 Timestamp: 2026-05-07 12:58:54Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:54Z\\\",\\\"trace_id\\\":\\\"0b8181c0-c858-4d17-af69-c23b7f5a0a00\\\",\\\"correlation_id\\\":\\\"2ce9e931-f423-4048-b1d7-ae1910cd4834\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 4f38b1ca-479e-445c-8db5-29366d0a0c00 Correlation ID: d0a4d623-1a23-4fcc-aebf-ccafeed44a92 Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"4f38b1ca-479e-445c-8db5-29366d0a0c00\\\",\\\"correlation_id\\\":\\\"d0a4d623-1a23-4fcc-aebf-ccafeed44a92\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1791a948-a974-424b-9246-7fedfa913b00 Correlation ID: b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"1791a948-a974-424b-9246-7fedfa913b00\\\",\\\"correlation_id\\\":\\\"b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be27598-8820-475c-b6ca-a30513720c00 Correlation ID: d3ed2a98-4aa9-4a63-819b-d36fd20b8d62 Timestamp: 2026-05-07 12:58:57Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:57Z\\\",\\\"trace_id\\\":\\\"2be27598-8820-475c-b6ca-a30513720c00\\\",\\\"correlation_id\\\":\\\"d3ed2a98-4aa9-4a63-819b-d36fd20b8d62\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring start {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring end {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 13:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"50260ccd-f119-47b0-baee-514de27801f2\",\"trace_id\":\"40e651df-62f6-4c3a-83ab-842112ec3ece\"}\n[2026-05-07 13:00:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"50260ccd-f119-47b0-baee-514de27801f2\",\"trace_id\":\"40e651df-62f6-4c3a-83ab-842112ec3ece\"}\n[2026-05-07 13:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"f6104856-aca3-4e7b-964e-bba66d730eb3\",\"trace_id\":\"98f34b7b-f715-49cb-8d3a-4e74c1118445\"}\n[2026-05-07 13:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"f6104856-aca3-4e7b-964e-bba66d730eb3\",\"trace_id\":\"98f34b7b-f715-49cb-8d3a-4e74c1118445\"}\n[2026-05-07 13:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b4a9e9a2-968c-429b-8fa8-67dd59bb297f\",\"trace_id\":\"ed6a83d0-8edb-4392-8717-26d91ffde80b\"}\n[2026-05-07 13:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b4a9e9a2-968c-429b-8fa8-67dd59bb297f\",\"trace_id\":\"ed6a83d0-8edb-4392-8717-26d91ffde80b\"}\n[2026-05-07 13:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:58:00, 2026-05-07 13:00:00] {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:58:00, 2026-05-07 13:00:00] {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"32bad9c1-861c-4a46-bece-585cc1170bfd\",\"trace_id\":\"0c20e20f-6a91-4346-9455-5cd1451c32a1\"}\n[2026-05-07 13:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"32bad9c1-861c-4a46-bece-585cc1170bfd\",\"trace_id\":\"0c20e20f-6a91-4346-9455-5cd1451c32a1\"}\n[2026-05-07 13:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c9d4f687-1643-431e-9377-2573a2e593fd\",\"trace_id\":\"02fab433-9c9a-49f7-b836-2b8a42551912\"}\n[2026-05-07 13:00:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c9d4f687-1643-431e-9377-2573a2e593fd\",\"trace_id\":\"02fab433-9c9a-49f7-b836-2b8a42551912\"}\n[2026-05-07 13:00:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:33] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:50:00, 2026-05-07 12:55:00] {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:55:00] {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:55\",\"to\":\"13:00\"} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:50\",\"to\":\"02:55\"} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:39] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b619cc55-b4ef-4913-ab44-6bce51933f7e\",\"trace_id\":\"7cacb418-6e9c-410b-bf3a-15bdf1837908\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a765990f-ffe2-44e0-967f-816f5452ce69\",\"trace_id\":\"9aee0f3f-7668-455f-b207-181b58848478\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b619cc55-b4ef-4913-ab44-6bce51933f7e\",\"trace_id\":\"7cacb418-6e9c-410b-bf3a-15bdf1837908\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T13:02:45.724437Z\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a765990f-ffe2-44e0-967f-816f5452ce69\",\"trace_id\":\"9aee0f3f-7668-455f-b207-181b58848478\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"055b4798-a759-4621-9e0b-652f8ee69ea1\",\"trace_id\":\"10911ef4-48d1-404a-9345-ecf0f5cb9977\"}\n[2026-05-07 13:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"055b4798-a759-4621-9e0b-652f8ee69ea1\",\"trace_id\":\"10911ef4-48d1-404a-9345-ecf0f5cb9977\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812331,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812332,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812333,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812334,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812335,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812336,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.ALERT: [SyncActivity] Failed {\"import_id\":812331,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.ALERT: [SyncActivity] Failed {\"import_id\":812332,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"441dabbc-0c1f-4d49-871c-08f96adbed01\",\"trace_id\":\"13597461-50ff-4a40-a329-255430126395\"}\n[2026-05-07 13:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"441dabbc-0c1f-4d49-871c-08f96adbed01\",\"trace_id\":\"13597461-50ff-4a40-a329-255430126395\"}\n[2026-05-07 13:00:57] local.ALERT: [SyncActivity] Failed {\"import_id\":812333,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.ALERT: [SyncActivity] Failed {\"import_id\":812334,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.ALERT: [SyncActivity] Failed {\"import_id\":812335,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] Start {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:44:00\",\"to\":\"2026-05-07 13:00:00\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] End {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] Memory usage {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27230632,\"memory_real_usage\":67108864,\"pid\":37116} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:59] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1db560c5-5d8c-419a-bfb0-e761473ecf44\",\"trace_id\":\"79eb494e-fd21-4171-b59d-d7d47358f1fb\"}\n[2026-05-07 13:00:59] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1db560c5-5d8c-419a-bfb0-e761473ecf44\",\"trace_id\":\"79eb494e-fd21-4171-b59d-d7d47358f1fb\"}\n[2026-05-07 13:01:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73c0e9d6-7ef5-4040-8e35-0a9bb4028abf\",\"trace_id\":\"55b51c26-06b9-4b59-b444-53017b805b30\"}\n[2026-05-07 13:01:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73c0e9d6-7ef5-4040-8e35-0a9bb4028abf\",\"trace_id\":\"55b51c26-06b9-4b59-b444-53017b805b30\"}\n[2026-05-07 13:01:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a7e717c-f314-4601-b1b8-fd550703f463\",\"trace_id\":\"a64281e5-027f-4856-a3e3-4f176c58eb6e\"}\n[2026-05-07 13:01:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a7e717c-f314-4601-b1b8-fd550703f463\",\"trace_id\":\"a64281e5-027f-4856-a3e3-4f176c58eb6e\"}\n[2026-05-07 13:01:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0c425954-2696-4890-97b7-219ccc38cf46\",\"trace_id\":\"d609b364-f3b6-4b85-babb-67caf96efdb1\"}\n[2026-05-07 13:01:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0c425954-2696-4890-97b7-219ccc38cf46\",\"trace_id\":\"d609b364-f3b6-4b85-babb-67caf96efdb1\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6bad97b-3db2-4dd6-839f-fcd485f06e65\",\"trace_id\":\"dcdde4a9-962c-46d1-9386-42adb54efbbf\"}\n[2026-05-07 13:01:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6bad97b-3db2-4dd6-839f-fcd485f06e65\",\"trace_id\":\"dcdde4a9-962c-46d1-9386-42adb54efbbf\"}\n[2026-05-07 13:01:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2893478e-8c43-4719-a2e8-7c9c0e0783e9\",\"trace_id\":\"3fc8f1f0-0727-42f1-8ee6-f2b32bd8834b\"}\n[2026-05-07 13:01:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2893478e-8c43-4719-a2e8-7c9c0e0783e9\",\"trace_id\":\"3fc8f1f0-0727-42f1-8ee6-f2b32bd8834b\"}\n[2026-05-07 13:01:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:17] local.INFO: Dispatching activity sync job {\"import_id\":812337,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3c44e0a7-ec5d-4206-a925-69f6e0783c2a\",\"trace_id\":\"60cf7a36-37ca-4ac4-a632-f317578d908f\"}\n[2026-05-07 13:01:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3c44e0a7-ec5d-4206-a925-69f6e0783c2a\",\"trace_id\":\"60cf7a36-37ca-4ac4-a632-f317578d908f\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SyncActivity] Start {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:00:00\",\"to\":\"2026-05-07 13:00:00\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:20] local.INFO: [SyncActivity] End {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:20] local.INFO: [SyncActivity] Memory usage {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27392888,\"memory_real_usage\":67108864,\"pid\":37116} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"55ebbc10-80bf-4724-ac64-678f6ef891cc\",\"trace_id\":\"f5392dc4-b352-4cae-b82a-004f77bbaf26\"}\n[2026-05-07 13:01:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"55ebbc10-80bf-4724-ac64-678f6ef891cc\",\"trace_id\":\"f5392dc4-b352-4cae-b82a-004f77bbaf26\"}\n[2026-05-07 13:01:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring start {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring end {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring start {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring end {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"825ef2d7-b5f8-45cd-b19d-20a179b06934\",\"trace_id\":\"5825a6c8-14c9-4bec-b688-d4895cfc41cc\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:50\",\"to\":\"12:55\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:45\",\"to\":\"02:50\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:57:40.609671Z\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring start {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring end {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":238.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:50] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":37119,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"902cef33-4733-4b2a-9693-affb8645cecc\",\"trace_id\":\"4ffe2bb8-67c6-422a-a846-319973cc0259\"}\n[2026-05-07 12:56:50] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23195976,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.3,\"average_seconds_per_request\":0} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1854.64,\"usage\":24199288,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25235152,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":70.53,\"usage\":25225384,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25263936,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":47.7,\"usage\":25451952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25490320,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":44.12,\"usage\":25547952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25587032,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":412.19,\"usage\":25739960,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25172624,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":291.83,\"usage\":25225088,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:54] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring start {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring end {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:28] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"c296bf83-9f7c-4228-b6f5-99db6040fa01\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.ERROR: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n {\"exception\":\"[object] (SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(125): SevenShores\\\\Hubspot\\\\Exceptions\\\\HubspotException::create(Object(GuzzleHttp\\\\Exception\\\\ClientException))\n#1 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#2 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#3 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#4 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#5 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#6 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#7 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#14 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#16 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#21 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#22 {main}\n\n[previous exception] [object] (GuzzleHttp\\\\Exception\\\\ClientException(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:111)\n[stacktrace]\n#0 /home/jiminny/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\\\Exception\\\\RequestException::create(Object(GuzzleHttp\\\\Psr7\\\\Request), Object(GuzzleHttp\\\\Psr7\\\\Response), NULL, Array, NULL)\n#1 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\\\Middleware::GuzzleHttp\\\\{closure}(Object(GuzzleHttp\\\\Psr7\\\\Response))\n#2 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\\\Promise\\\\Promise::callHandler(1, Object(GuzzleHttp\\\\Psr7\\\\Response), NULL)\n#3 /home/jiminny/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\\\Promise\\\\Promise::GuzzleHttp\\\\Promise\\\\{closure}()\n#4 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\\\Promise\\\\TaskQueue->run(true)\n#5 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitFn()\n#6 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#7 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitList()\n#8 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#9 /home/jiminny/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\\\Promise\\\\Promise->wait()\n#10 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(113): GuzzleHttp\\\\Client->request('POST', 'https://api.hub...', Array)\n#11 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#12 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#13 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#14 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#15 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#16 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#17 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#24 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#26 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#27 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#28 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#31 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#32 {main}\n\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring start {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring end {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:36] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.NOTICE: Calendar sync start {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: ef9bb388-453e-4744-a2e1-95e49ced1700 Correlation ID: 3b889c73-f943-4048-ba3b-63ac50581245 Timestamp: 2026-05-07 12:58:53Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:53Z\\\",\\\"trace_id\\\":\\\"ef9bb388-453e-4744-a2e1-95e49ced1700\\\",\\\"correlation_id\\\":\\\"3b889c73-f943-4048-ba3b-63ac50581245\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0b8181c0-c858-4d17-af69-c23b7f5a0a00 Correlation ID: 2ce9e931-f423-4048-b1d7-ae1910cd4834 Timestamp: 2026-05-07 12:58:54Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:54Z\\\",\\\"trace_id\\\":\\\"0b8181c0-c858-4d17-af69-c23b7f5a0a00\\\",\\\"correlation_id\\\":\\\"2ce9e931-f423-4048-b1d7-ae1910cd4834\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 4f38b1ca-479e-445c-8db5-29366d0a0c00 Correlation ID: d0a4d623-1a23-4fcc-aebf-ccafeed44a92 Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"4f38b1ca-479e-445c-8db5-29366d0a0c00\\\",\\\"correlation_id\\\":\\\"d0a4d623-1a23-4fcc-aebf-ccafeed44a92\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1791a948-a974-424b-9246-7fedfa913b00 Correlation ID: b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"1791a948-a974-424b-9246-7fedfa913b00\\\",\\\"correlation_id\\\":\\\"b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be27598-8820-475c-b6ca-a30513720c00 Correlation ID: d3ed2a98-4aa9-4a63-819b-d36fd20b8d62 Timestamp: 2026-05-07 12:58:57Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:57Z\\\",\\\"trace_id\\\":\\\"2be27598-8820-475c-b6ca-a30513720c00\\\",\\\"correlation_id\\\":\\\"d3ed2a98-4aa9-4a63-819b-d36fd20b8d62\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring start {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring end {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 13:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"50260ccd-f119-47b0-baee-514de27801f2\",\"trace_id\":\"40e651df-62f6-4c3a-83ab-842112ec3ece\"}\n[2026-05-07 13:00:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"50260ccd-f119-47b0-baee-514de27801f2\",\"trace_id\":\"40e651df-62f6-4c3a-83ab-842112ec3ece\"}\n[2026-05-07 13:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"f6104856-aca3-4e7b-964e-bba66d730eb3\",\"trace_id\":\"98f34b7b-f715-49cb-8d3a-4e74c1118445\"}\n[2026-05-07 13:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"f6104856-aca3-4e7b-964e-bba66d730eb3\",\"trace_id\":\"98f34b7b-f715-49cb-8d3a-4e74c1118445\"}\n[2026-05-07 13:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b4a9e9a2-968c-429b-8fa8-67dd59bb297f\",\"trace_id\":\"ed6a83d0-8edb-4392-8717-26d91ffde80b\"}\n[2026-05-07 13:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b4a9e9a2-968c-429b-8fa8-67dd59bb297f\",\"trace_id\":\"ed6a83d0-8edb-4392-8717-26d91ffde80b\"}\n[2026-05-07 13:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:58:00, 2026-05-07 13:00:00] {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:58:00, 2026-05-07 13:00:00] {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"32bad9c1-861c-4a46-bece-585cc1170bfd\",\"trace_id\":\"0c20e20f-6a91-4346-9455-5cd1451c32a1\"}\n[2026-05-07 13:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"32bad9c1-861c-4a46-bece-585cc1170bfd\",\"trace_id\":\"0c20e20f-6a91-4346-9455-5cd1451c32a1\"}\n[2026-05-07 13:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c9d4f687-1643-431e-9377-2573a2e593fd\",\"trace_id\":\"02fab433-9c9a-49f7-b836-2b8a42551912\"}\n[2026-05-07 13:00:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c9d4f687-1643-431e-9377-2573a2e593fd\",\"trace_id\":\"02fab433-9c9a-49f7-b836-2b8a42551912\"}\n[2026-05-07 13:00:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:33] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:50:00, 2026-05-07 12:55:00] {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:55:00] {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:55\",\"to\":\"13:00\"} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:50\",\"to\":\"02:55\"} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:39] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b619cc55-b4ef-4913-ab44-6bce51933f7e\",\"trace_id\":\"7cacb418-6e9c-410b-bf3a-15bdf1837908\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a765990f-ffe2-44e0-967f-816f5452ce69\",\"trace_id\":\"9aee0f3f-7668-455f-b207-181b58848478\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b619cc55-b4ef-4913-ab44-6bce51933f7e\",\"trace_id\":\"7cacb418-6e9c-410b-bf3a-15bdf1837908\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T13:02:45.724437Z\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a765990f-ffe2-44e0-967f-816f5452ce69\",\"trace_id\":\"9aee0f3f-7668-455f-b207-181b58848478\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"055b4798-a759-4621-9e0b-652f8ee69ea1\",\"trace_id\":\"10911ef4-48d1-404a-9345-ecf0f5cb9977\"}\n[2026-05-07 13:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"055b4798-a759-4621-9e0b-652f8ee69ea1\",\"trace_id\":\"10911ef4-48d1-404a-9345-ecf0f5cb9977\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812331,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812332,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812333,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812334,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812335,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812336,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.ALERT: [SyncActivity] Failed {\"import_id\":812331,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.ALERT: [SyncActivity] Failed {\"import_id\":812332,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"441dabbc-0c1f-4d49-871c-08f96adbed01\",\"trace_id\":\"13597461-50ff-4a40-a329-255430126395\"}\n[2026-05-07 13:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"441dabbc-0c1f-4d49-871c-08f96adbed01\",\"trace_id\":\"13597461-50ff-4a40-a329-255430126395\"}\n[2026-05-07 13:00:57] local.ALERT: [SyncActivity] Failed {\"import_id\":812333,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.ALERT: [SyncActivity] Failed {\"import_id\":812334,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.ALERT: [SyncActivity] Failed {\"import_id\":812335,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] Start {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:44:00\",\"to\":\"2026-05-07 13:00:00\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] End {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] Memory usage {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27230632,\"memory_real_usage\":67108864,\"pid\":37116} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:59] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1db560c5-5d8c-419a-bfb0-e761473ecf44\",\"trace_id\":\"79eb494e-fd21-4171-b59d-d7d47358f1fb\"}\n[2026-05-07 13:00:59] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1db560c5-5d8c-419a-bfb0-e761473ecf44\",\"trace_id\":\"79eb494e-fd21-4171-b59d-d7d47358f1fb\"}\n[2026-05-07 13:01:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73c0e9d6-7ef5-4040-8e35-0a9bb4028abf\",\"trace_id\":\"55b51c26-06b9-4b59-b444-53017b805b30\"}\n[2026-05-07 13:01:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73c0e9d6-7ef5-4040-8e35-0a9bb4028abf\",\"trace_id\":\"55b51c26-06b9-4b59-b444-53017b805b30\"}\n[2026-05-07 13:01:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a7e717c-f314-4601-b1b8-fd550703f463\",\"trace_id\":\"a64281e5-027f-4856-a3e3-4f176c58eb6e\"}\n[2026-05-07 13:01:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a7e717c-f314-4601-b1b8-fd550703f463\",\"trace_id\":\"a64281e5-027f-4856-a3e3-4f176c58eb6e\"}\n[2026-05-07 13:01:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0c425954-2696-4890-97b7-219ccc38cf46\",\"trace_id\":\"d609b364-f3b6-4b85-babb-67caf96efdb1\"}\n[2026-05-07 13:01:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0c425954-2696-4890-97b7-219ccc38cf46\",\"trace_id\":\"d609b364-f3b6-4b85-babb-67caf96efdb1\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6bad97b-3db2-4dd6-839f-fcd485f06e65\",\"trace_id\":\"dcdde4a9-962c-46d1-9386-42adb54efbbf\"}\n[2026-05-07 13:01:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6bad97b-3db2-4dd6-839f-fcd485f06e65\",\"trace_id\":\"dcdde4a9-962c-46d1-9386-42adb54efbbf\"}\n[2026-05-07 13:01:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2893478e-8c43-4719-a2e8-7c9c0e0783e9\",\"trace_id\":\"3fc8f1f0-0727-42f1-8ee6-f2b32bd8834b\"}\n[2026-05-07 13:01:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2893478e-8c43-4719-a2e8-7c9c0e0783e9\",\"trace_id\":\"3fc8f1f0-0727-42f1-8ee6-f2b32bd8834b\"}\n[2026-05-07 13:01:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:17] local.INFO: Dispatching activity sync job {\"import_id\":812337,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3c44e0a7-ec5d-4206-a925-69f6e0783c2a\",\"trace_id\":\"60cf7a36-37ca-4ac4-a632-f317578d908f\"}\n[2026-05-07 13:01:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3c44e0a7-ec5d-4206-a925-69f6e0783c2a\",\"trace_id\":\"60cf7a36-37ca-4ac4-a632-f317578d908f\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SyncActivity] Start {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:00:00\",\"to\":\"2026-05-07 13:00:00\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:20] local.INFO: [SyncActivity] End {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:20] local.INFO: [SyncActivity] Memory usage {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27392888,\"memory_real_usage\":67108864,\"pid\":37116} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"55ebbc10-80bf-4724-ac64-678f6ef891cc\",\"trace_id\":\"f5392dc4-b352-4cae-b82a-004f77bbaf26\"}\n[2026-05-07 13:01:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"55ebbc10-80bf-4724-ac64-678f6ef891cc\",\"trace_id\":\"f5392dc4-b352-4cae-b82a-004f77bbaf26\"}\n[2026-05-07 13:01:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"18","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n// if ($this->shouldStopPagination($state, $teamId)) {\n// break;\n// }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n// $this->validateTokenIfNeeded($client, $state);\n// usleep($delay);\n\n $page = $this->executeSearchRequest($client, $endpoint, $payload, $state);\n\n// $state->setTotal($page['total'] ?? 0);\n// $this->updateLastRecordId($page, $state);\n//\n// // Safely iterate over results with null check\n// $results = $page['results'] ?? [];\n// foreach ($results as $row) {\n// $state->incrementTotalRecords();\n// yield $row;\n// }\n//\n// $state->setOffset($this->getNextOffset($page));\n// $state->incrementRequestCount();\n//\n// $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $endpoint, array $payload, PaginationState $state): array\n {\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $response->toArray();\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n } else {\n throw $e;\n }\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n// if ($this->shouldStopPagination($state, $teamId)) {\n// break;\n// }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n// $this->validateTokenIfNeeded($client, $state);\n// usleep($delay);\n\n $page = $this->executeSearchRequest($client, $endpoint, $payload, $state);\n\n// $state->setTotal($page['total'] ?? 0);\n// $this->updateLastRecordId($page, $state);\n//\n// // Safely iterate over results with null check\n// $results = $page['results'] ?? [];\n// foreach ($results as $row) {\n// $state->incrementTotalRecords();\n// yield $row;\n// }\n//\n// $state->setOffset($this->getNextOffset($page));\n// $state->incrementRequestCount();\n//\n// $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $endpoint, array $payload, PaginationState $state): array\n {\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $response->toArray();\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n } else {\n throw $e;\n }\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3058524373122718549
|
6701901348364979261
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
933
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.55,"average_seconds_per_request":0.55} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring start {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.51,"average_seconds_per_request":0.51} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring end {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.62,"average_seconds_per_request":0.62} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.78,"average_seconds_per_request":0.78} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":1.21,"average_seconds_per_request":1.21} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.53,"average_seconds_per_request":0.53} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:32] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"92242bd6-7014-4487-a50b-1570e1a88e7a","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring start {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring end {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring start {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring end {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"825ef2d7-b5f8-45cd-b19d-20a179b06934","trace_id":"5825a6c8-14c9-4bec-b688-d4895cfc41cc"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring start {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring end {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:50","to":"12:55"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:45","to":"02:50"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:57:40.609671Z"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring start {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring end {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":57,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":238.3,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3...
|
4070
|
NULL
|
NULL
|
NULL
|
|
4072
|
146
|
2
|
2026-05-07T13:01:36.083679+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778158896083_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
933
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.55,"average_seconds_per_request":0.55} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring start {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.51,"average_seconds_per_request":0.51} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring end {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.62,"average_seconds_per_request":0.62} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.78,"average_seconds_per_request":0.78} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":1.21,"average_seconds_per_request":1.21} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.53,"average_seconds_per_request":0.53} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:32] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"92242bd6-7014-4487-a50b-1570e1a88e7a","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring start {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring end {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring start {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring end {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"825ef2d7-b5f8-45cd-b19d-20a179b06934","trace_id":"5825a6c8-14c9-4bec-b688-d4895cfc41cc"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring start {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring end {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:50","to":"12:55"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:45","to":"02:50"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:57:40.609671Z"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring start {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring end {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":57,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":238.3,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.040226065,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master<br/>Some incoming commits are not fetched<br/>","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"933","depth":4,"bounds":{"left":0.95977396,"top":0.07581804,"width":0.012632979,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring start {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring end {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring start {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring end {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"825ef2d7-b5f8-45cd-b19d-20a179b06934\",\"trace_id\":\"5825a6c8-14c9-4bec-b688-d4895cfc41cc\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:50\",\"to\":\"12:55\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:45\",\"to\":\"02:50\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:57:40.609671Z\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring start {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring end {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":238.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:50] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":37119,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"902cef33-4733-4b2a-9693-affb8645cecc\",\"trace_id\":\"4ffe2bb8-67c6-422a-a846-319973cc0259\"}\n[2026-05-07 12:56:50] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23195976,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.3,\"average_seconds_per_request\":0} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1854.64,\"usage\":24199288,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25235152,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":70.53,\"usage\":25225384,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25263936,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":47.7,\"usage\":25451952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25490320,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":44.12,\"usage\":25547952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25587032,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":412.19,\"usage\":25739960,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25172624,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":291.83,\"usage\":25225088,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:54] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring start {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring end {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:28] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"c296bf83-9f7c-4228-b6f5-99db6040fa01\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.ERROR: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n {\"exception\":\"[object] (SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(125): SevenShores\\\\Hubspot\\\\Exceptions\\\\HubspotException::create(Object(GuzzleHttp\\\\Exception\\\\ClientException))\n#1 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#2 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#3 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#4 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#5 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#6 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#7 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#14 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#16 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#21 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#22 {main}\n\n[previous exception] [object] (GuzzleHttp\\\\Exception\\\\ClientException(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:111)\n[stacktrace]\n#0 /home/jiminny/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\\\Exception\\\\RequestException::create(Object(GuzzleHttp\\\\Psr7\\\\Request), Object(GuzzleHttp\\\\Psr7\\\\Response), NULL, Array, NULL)\n#1 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\\\Middleware::GuzzleHttp\\\\{closure}(Object(GuzzleHttp\\\\Psr7\\\\Response))\n#2 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\\\Promise\\\\Promise::callHandler(1, Object(GuzzleHttp\\\\Psr7\\\\Response), NULL)\n#3 /home/jiminny/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\\\Promise\\\\Promise::GuzzleHttp\\\\Promise\\\\{closure}()\n#4 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\\\Promise\\\\TaskQueue->run(true)\n#5 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitFn()\n#6 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#7 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitList()\n#8 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#9 /home/jiminny/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\\\Promise\\\\Promise->wait()\n#10 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(113): GuzzleHttp\\\\Client->request('POST', 'https://api.hub...', Array)\n#11 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#12 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#13 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#14 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#15 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#16 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#17 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#24 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#26 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#27 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#28 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#31 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#32 {main}\n\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring start {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring end {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:36] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.NOTICE: Calendar sync start {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: ef9bb388-453e-4744-a2e1-95e49ced1700 Correlation ID: 3b889c73-f943-4048-ba3b-63ac50581245 Timestamp: 2026-05-07 12:58:53Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:53Z\\\",\\\"trace_id\\\":\\\"ef9bb388-453e-4744-a2e1-95e49ced1700\\\",\\\"correlation_id\\\":\\\"3b889c73-f943-4048-ba3b-63ac50581245\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0b8181c0-c858-4d17-af69-c23b7f5a0a00 Correlation ID: 2ce9e931-f423-4048-b1d7-ae1910cd4834 Timestamp: 2026-05-07 12:58:54Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:54Z\\\",\\\"trace_id\\\":\\\"0b8181c0-c858-4d17-af69-c23b7f5a0a00\\\",\\\"correlation_id\\\":\\\"2ce9e931-f423-4048-b1d7-ae1910cd4834\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 4f38b1ca-479e-445c-8db5-29366d0a0c00 Correlation ID: d0a4d623-1a23-4fcc-aebf-ccafeed44a92 Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"4f38b1ca-479e-445c-8db5-29366d0a0c00\\\",\\\"correlation_id\\\":\\\"d0a4d623-1a23-4fcc-aebf-ccafeed44a92\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1791a948-a974-424b-9246-7fedfa913b00 Correlation ID: b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"1791a948-a974-424b-9246-7fedfa913b00\\\",\\\"correlation_id\\\":\\\"b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be27598-8820-475c-b6ca-a30513720c00 Correlation ID: d3ed2a98-4aa9-4a63-819b-d36fd20b8d62 Timestamp: 2026-05-07 12:58:57Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:57Z\\\",\\\"trace_id\\\":\\\"2be27598-8820-475c-b6ca-a30513720c00\\\",\\\"correlation_id\\\":\\\"d3ed2a98-4aa9-4a63-819b-d36fd20b8d62\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring start {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring end {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 13:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"50260ccd-f119-47b0-baee-514de27801f2\",\"trace_id\":\"40e651df-62f6-4c3a-83ab-842112ec3ece\"}\n[2026-05-07 13:00:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"50260ccd-f119-47b0-baee-514de27801f2\",\"trace_id\":\"40e651df-62f6-4c3a-83ab-842112ec3ece\"}\n[2026-05-07 13:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"f6104856-aca3-4e7b-964e-bba66d730eb3\",\"trace_id\":\"98f34b7b-f715-49cb-8d3a-4e74c1118445\"}\n[2026-05-07 13:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"f6104856-aca3-4e7b-964e-bba66d730eb3\",\"trace_id\":\"98f34b7b-f715-49cb-8d3a-4e74c1118445\"}\n[2026-05-07 13:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b4a9e9a2-968c-429b-8fa8-67dd59bb297f\",\"trace_id\":\"ed6a83d0-8edb-4392-8717-26d91ffde80b\"}\n[2026-05-07 13:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b4a9e9a2-968c-429b-8fa8-67dd59bb297f\",\"trace_id\":\"ed6a83d0-8edb-4392-8717-26d91ffde80b\"}\n[2026-05-07 13:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:58:00, 2026-05-07 13:00:00] {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:58:00, 2026-05-07 13:00:00] {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"32bad9c1-861c-4a46-bece-585cc1170bfd\",\"trace_id\":\"0c20e20f-6a91-4346-9455-5cd1451c32a1\"}\n[2026-05-07 13:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"32bad9c1-861c-4a46-bece-585cc1170bfd\",\"trace_id\":\"0c20e20f-6a91-4346-9455-5cd1451c32a1\"}\n[2026-05-07 13:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c9d4f687-1643-431e-9377-2573a2e593fd\",\"trace_id\":\"02fab433-9c9a-49f7-b836-2b8a42551912\"}\n[2026-05-07 13:00:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c9d4f687-1643-431e-9377-2573a2e593fd\",\"trace_id\":\"02fab433-9c9a-49f7-b836-2b8a42551912\"}\n[2026-05-07 13:00:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:33] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:50:00, 2026-05-07 12:55:00] {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:55:00] {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:55\",\"to\":\"13:00\"} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:50\",\"to\":\"02:55\"} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:39] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b619cc55-b4ef-4913-ab44-6bce51933f7e\",\"trace_id\":\"7cacb418-6e9c-410b-bf3a-15bdf1837908\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a765990f-ffe2-44e0-967f-816f5452ce69\",\"trace_id\":\"9aee0f3f-7668-455f-b207-181b58848478\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b619cc55-b4ef-4913-ab44-6bce51933f7e\",\"trace_id\":\"7cacb418-6e9c-410b-bf3a-15bdf1837908\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T13:02:45.724437Z\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a765990f-ffe2-44e0-967f-816f5452ce69\",\"trace_id\":\"9aee0f3f-7668-455f-b207-181b58848478\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"055b4798-a759-4621-9e0b-652f8ee69ea1\",\"trace_id\":\"10911ef4-48d1-404a-9345-ecf0f5cb9977\"}\n[2026-05-07 13:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"055b4798-a759-4621-9e0b-652f8ee69ea1\",\"trace_id\":\"10911ef4-48d1-404a-9345-ecf0f5cb9977\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812331,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812332,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812333,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812334,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812335,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812336,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.ALERT: [SyncActivity] Failed {\"import_id\":812331,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.ALERT: [SyncActivity] Failed {\"import_id\":812332,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"441dabbc-0c1f-4d49-871c-08f96adbed01\",\"trace_id\":\"13597461-50ff-4a40-a329-255430126395\"}\n[2026-05-07 13:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"441dabbc-0c1f-4d49-871c-08f96adbed01\",\"trace_id\":\"13597461-50ff-4a40-a329-255430126395\"}\n[2026-05-07 13:00:57] local.ALERT: [SyncActivity] Failed {\"import_id\":812333,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.ALERT: [SyncActivity] Failed {\"import_id\":812334,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.ALERT: [SyncActivity] Failed {\"import_id\":812335,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] Start {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:44:00\",\"to\":\"2026-05-07 13:00:00\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] End {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] Memory usage {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27230632,\"memory_real_usage\":67108864,\"pid\":37116} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:59] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1db560c5-5d8c-419a-bfb0-e761473ecf44\",\"trace_id\":\"79eb494e-fd21-4171-b59d-d7d47358f1fb\"}\n[2026-05-07 13:00:59] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1db560c5-5d8c-419a-bfb0-e761473ecf44\",\"trace_id\":\"79eb494e-fd21-4171-b59d-d7d47358f1fb\"}\n[2026-05-07 13:01:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73c0e9d6-7ef5-4040-8e35-0a9bb4028abf\",\"trace_id\":\"55b51c26-06b9-4b59-b444-53017b805b30\"}\n[2026-05-07 13:01:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73c0e9d6-7ef5-4040-8e35-0a9bb4028abf\",\"trace_id\":\"55b51c26-06b9-4b59-b444-53017b805b30\"}\n[2026-05-07 13:01:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a7e717c-f314-4601-b1b8-fd550703f463\",\"trace_id\":\"a64281e5-027f-4856-a3e3-4f176c58eb6e\"}\n[2026-05-07 13:01:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a7e717c-f314-4601-b1b8-fd550703f463\",\"trace_id\":\"a64281e5-027f-4856-a3e3-4f176c58eb6e\"}\n[2026-05-07 13:01:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0c425954-2696-4890-97b7-219ccc38cf46\",\"trace_id\":\"d609b364-f3b6-4b85-babb-67caf96efdb1\"}\n[2026-05-07 13:01:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0c425954-2696-4890-97b7-219ccc38cf46\",\"trace_id\":\"d609b364-f3b6-4b85-babb-67caf96efdb1\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6bad97b-3db2-4dd6-839f-fcd485f06e65\",\"trace_id\":\"dcdde4a9-962c-46d1-9386-42adb54efbbf\"}\n[2026-05-07 13:01:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6bad97b-3db2-4dd6-839f-fcd485f06e65\",\"trace_id\":\"dcdde4a9-962c-46d1-9386-42adb54efbbf\"}\n[2026-05-07 13:01:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2893478e-8c43-4719-a2e8-7c9c0e0783e9\",\"trace_id\":\"3fc8f1f0-0727-42f1-8ee6-f2b32bd8834b\"}\n[2026-05-07 13:01:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2893478e-8c43-4719-a2e8-7c9c0e0783e9\",\"trace_id\":\"3fc8f1f0-0727-42f1-8ee6-f2b32bd8834b\"}\n[2026-05-07 13:01:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:17] local.INFO: Dispatching activity sync job {\"import_id\":812337,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3c44e0a7-ec5d-4206-a925-69f6e0783c2a\",\"trace_id\":\"60cf7a36-37ca-4ac4-a632-f317578d908f\"}\n[2026-05-07 13:01:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3c44e0a7-ec5d-4206-a925-69f6e0783c2a\",\"trace_id\":\"60cf7a36-37ca-4ac4-a632-f317578d908f\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SyncActivity] Start {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:00:00\",\"to\":\"2026-05-07 13:00:00\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:20] local.INFO: [SyncActivity] End {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:20] local.INFO: [SyncActivity] Memory usage {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27392888,\"memory_real_usage\":67108864,\"pid\":37116} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"55ebbc10-80bf-4724-ac64-678f6ef891cc\",\"trace_id\":\"f5392dc4-b352-4cae-b82a-004f77bbaf26\"}\n[2026-05-07 13:01:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"55ebbc10-80bf-4724-ac64-678f6ef891cc\",\"trace_id\":\"f5392dc4-b352-4cae-b82a-004f77bbaf26\"}\n[2026-05-07 13:01:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa8a3008-d298-4682-bbbc-fdc77520e0d7\",\"trace_id\":\"7cfb2afb-9fc4-4a77-81be-65dce93c7d80\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"932ced9d-9804-48ed-976a-1f8bf5e75707\",\"trace_id\":\"21bf320c-58f3-4082-831d-9f07f6c6a669\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.55,\"average_seconds_per_request\":0.55} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring start {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:18] local.NOTICE: Monitoring end {\"correlation_id\":\"ae3ec78f-432c-4e22-b73b-0413af73d9f3\",\"trace_id\":\"c2feb517-0f2b-4ad9-bce5-4d57476a164b\"}\n[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bf2f73f-007c-4909-925e-f1749fbf87b3\",\"trace_id\":\"8429123c-d92c-48d9-a154-29bc0aa0e2a1\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.62,\"average_seconds_per_request\":0.62} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.78,\"average_seconds_per_request\":0.78} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":1.21,\"average_seconds_per_request\":1.21} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":1,\"total_elapsed_seconds\":0.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"84c9b84a-9f60-4e35-956a-ead94112d174\",\"trace_id\":\"07a542c8-266e-40e4-97ec-725d0fd3192d\"}\n[2026-05-07 12:52:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8\",\"trace_id\":\"64ccac6b-34f7-45ed-a8ac-b63adbb19107\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e1a36d0-a87a-455f-88b9-04f16718ea33\",\"trace_id\":\"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80549428-beea-4a6c-97d3-818ca0f059f3\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:32] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"92242bd6-7014-4487-a50b-1570e1a88e7a\",\"trace_id\":\"55ddd59b-073b-4331-8cdb-baa869dcff70\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:52:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d467eace-3254-4ecc-8d8e-a94688d6d3ad\",\"trace_id\":\"5105ca8f-3c0d-4798-b748-5a7d6fbd7531\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"04363b29-2f82-470a-89d0-c5ce4f4779d7\",\"trace_id\":\"3c76a1f1-3348-4e2b-897c-4a216ca95147\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5ebbecd0-866c-443f-965f-b6ac03735379\",\"trace_id\":\"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring start {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:18] local.NOTICE: Monitoring end {\"correlation_id\":\"f39f0d3c-a292-41cb-8834-45dae1f8cf47\",\"trace_id\":\"b6e7e2a7-85af-401d-afc6-bec2bdab34d7\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"419bb747-2669-496f-944b-1073496cc271\",\"trace_id\":\"4cb913a4-ef75-422b-80eb-fbfb988521ed\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f4805c97-9344-4111-8be2-2b1efeae07bb\",\"trace_id\":\"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:53:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f\",\"trace_id\":\"75f27a23-2021-41a5-9e5f-4b1cb4f143a6\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ad151521-f676-4351-a70b-f44dc0b94990\",\"trace_id\":\"17e39c4c-85cb-49a4-815e-b7315a8c2249\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ed0583cf-03c6-4696-b859-876c8efa4473\",\"trace_id\":\"3f9e0a3c-2178-4885-95eb-8618b8cfc042\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring start {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:10] local.NOTICE: Monitoring end {\"correlation_id\":\"7142250a-b897-4620-8ff7-fd9b3a1f3802\",\"trace_id\":\"597def1e-ca38-4cc4-8890-fdcd5baff948\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d\",\"trace_id\":\"73937bdc-10b9-4508-9ef2-86420fe774fc\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f1d8932-2839-4256-99ab-1fd13e8381c6\",\"trace_id\":\"cc090767-edc2-4a89-90c2-116f1737de7f\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9d324c6d-5b36-46ee-89c6-f95f86bf3f39\",\"trace_id\":\"860cdff0-9356-4e94-84cc-e011a74ba56c\"}\n[2026-05-07 12:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c2009a88-eea6-4954-8642-ef5d9cb56b42\",\"trace_id\":\"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab\"}\n[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"825ef2d7-b5f8-45cd-b19d-20a179b06934\",\"trace_id\":\"5825a6c8-14c9-4bec-b688-d4895cfc41cc\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c0dc8e25-7a51-4023-be61-d0abd6d72e37\",\"trace_id\":\"16b8fa3e-92b1-465e-82d4-642a2d14c7c5\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c65fdd1-1f79-435d-b469-add46ddafd63\",\"trace_id\":\"62f2a3bb-3be7-4c76-a9dd-222bfb895fab\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring start {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:11] local.NOTICE: Monitoring end {\"correlation_id\":\"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55\",\"trace_id\":\"e75cb5c6-6dd8-4000-8d26-4418020c7cfe\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dba5c474-4d40-44da-baf2-f8b30db9a2f5\",\"trace_id\":\"adb45622-1fb0-457c-bf20-8dcceab2d62a\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"22c96a8e-4424-4a1f-b349-206276eefe4c\",\"trace_id\":\"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5f958e8d-1d01-4144-abd6-2513e5524ad3\",\"trace_id\":\"828bc5b7-e2aa-4443-901f-38dd94bb7cc5\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a\",\"trace_id\":\"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c5dd8132-d7e1-4caa-84d1-0a50d02df8da\",\"trace_id\":\"bc7341c5-b8e2-48ea-9670-7ec375363180\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0\",\"trace_id\":\"efb1619f-4185-4319-9bfb-305cee0b6bfc\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:50\",\"to\":\"12:55\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:45\",\"to\":\"02:50\"} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3792b31a-080a-4fe4-9823-5602361325ba\",\"trace_id\":\"41a2fde1-48f6-4667-84b7-a2f93e9ad2da\"}\n[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"e31362f8-5362-478d-911d-099b61f96cd2\",\"trace_id\":\"2587b5d0-6bef-40a5-afd5-a15003b7cf95\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5e676ae4-5d63-49d4-9001-559088adf06b\",\"trace_id\":\"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:57:40.609671Z\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f830896-8142-41d1-bfc9-4cbb9179ffda\",\"trace_id\":\"e348a096-7f37-4308-a6d8-66131e8be901\"}\n[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2d8b30b4-87aa-480f-9b9e-5a9c709b742a\",\"trace_id\":\"25b7be6c-1faf-430b-a724-a4ff28773a31\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"efd336d7-db4d-459e-b6e7-bf73454e955e\",\"trace_id\":\"0a82c3d5-0417-48c8-b88f-70ec33e2326a\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring start {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:12] local.NOTICE: Monitoring end {\"correlation_id\":\"68481576-8ca6-4ee5-821b-07374702971d\",\"trace_id\":\"c73eac09-5d20-425f-9c22-bd6c65fc60c9\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24\",\"trace_id\":\"f688cd98-c171-4e30-8c72-afc14f040861\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f01636a9-4059-4ab0-9ad2-b078d42cedbd\",\"trace_id\":\"fea938d8-aedc-40ec-b8c2-2f487e1ac808\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d4558901-264d-4238-8589-62a137bac1fd\",\"trace_id\":\"38e6b5dc-ebd6-46a7-8224-7374d4e58630\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2541e0fa-1117-4863-9523-d723b5821a24\",\"trace_id\":\"d9600320-5133-4938-bdd1-2256dfdf8db4\"}\n[2026-05-07 12:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e444f776-37db-4c6d-b30e-20b01a089de7\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":57,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":238.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"fa65a15d-da5b-4c86-ae85-c16937786996\",\"trace_id\":\"7e655fe3-04eb-4a0f-b056-eb64e9c75a80\"}\n[2026-05-07 12:56:50] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":37119,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"902cef33-4733-4b2a-9693-affb8645cecc\",\"trace_id\":\"4ffe2bb8-67c6-422a-a846-319973cc0259\"}\n[2026-05-07 12:56:50] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23195976,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"20256b2c-2b69-48f6-bdd3-61d047eb0b0d\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:50] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"b6c31853-3729-4780-a52b-ebcce17d41b9\",\"trace_id\":\"1168869e-e07c-4702-a046-42fc95a91f6d\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:51] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.3,\"average_seconds_per_request\":0} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1854.64,\"usage\":24199288,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"ed0ddf67-6a40-4958-913f-a055eee12af4\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":25235152,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:52] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":70.53,\"usage\":25225384,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0d3cf2b0-a245-4a83-9bd5-1c5788b85738\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":25263936,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":47.7,\"usage\":25451952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"1e46be79-1db4-4829-b19c-1548141a94e0\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":25490320,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":44.12,\"usage\":25547952,\"real_usage\":65011712,\"pid\":37113,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"0da4e096-9534-4a72-bc1f-8e61561d8e37\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25587032,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":412.19,\"usage\":25739960,\"real_usage\":65011712,\"pid\":37113} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\",\"correlation_id\":\"ccfcef46-d2f0-4646-925b-6f1bf46fd46d\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":25172624,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":0,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:53] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":291.83,\"usage\":25225088,\"real_usage\":65011712,\"pid\":37113} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:56:54] local.ERROR: Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned {\"exception\":\"[object] (TypeError(code: 0): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned at /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:82)\n[stacktrace]\n#0 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'deals', 0, 0, NULL)\n#1 /home/jiminny/app/Services/Crm/Hubspot/OpportunitySyncStrategy/HubspotSyncStrategyBase.php(55): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'deals', 0, 0, NULL)\n#2 /home/jiminny/app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php(73): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\OpportunitySyncStrategy\\\\HubspotSyncStrategyBase->fetchOpportunities(Array, 0, NULL)\n#3 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(118): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->syncOpportunities(Array)\n#4 /home/jiminny/app/Jobs/Crm/SyncHubspotObjects.php(86): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->syncHubspotCrmObjects(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service), Object(Illuminate\\\\Support\\\\Carbon))\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects->handle(Object(Jiminny\\\\Services\\\\ResolveTeamCrmConnection), Object(Illuminate\\\\Log\\\\LogManager), Object(Jiminny\\\\Repositories\\\\TeamRepository))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\\\\Container\\\\Container->call(Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Bus\\\\Dispatcher->Illuminate\\\\Bus\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(136): Illuminate\\\\Bus\\\\Dispatcher->dispatchNow(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects), false)\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Queue\\\\CallQueuedHandler->Illuminate\\\\Queue\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(129): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\\\\Queue\\\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Jiminny\\\\Jobs\\\\Crm\\\\SyncHubspotObjects))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\\\Queue\\\\CallQueuedHandler->call(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Array)\n#20 /home/jiminny/app/Queue/Worker/Worker.php(71): Illuminate\\\\Queue\\\\Jobs\\\\Job->fire()\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Jiminny\\\\Queue\\\\Worker\\\\Worker->process('redis', Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\\\\Queue\\\\Worker->runJob(Object(Illuminate\\\\Queue\\\\Jobs\\\\RedisJob), 'redis', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\\\\Queue\\\\Worker->daemon('redis', 'crm-sync,crm-up...', Object(Illuminate\\\\Queue\\\\WorkerOptions))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->runWorker('redis', 'crm-sync,crm-up...')\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\\\Queue\\\\Console\\\\WorkCommand->handle()\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#31 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#33 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#34 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Illuminate\\\\Queue\\\\Console\\\\WorkCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#35 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#38 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#39 {main}\n\"} {\"correlation_id\":\"eb2b7ebe-9423-4dbc-a38b-e01816fd6aea\",\"trace_id\":\"ba7f9eee-8dcb-4c94-acb0-18f9363757ad\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854299be-d77a-48bc-870c-b78333916d69\",\"trace_id\":\"89c1eb6c-bc78-419c-9304-b770093d5692\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e512a3-a227-4569-bcd2-3258a9142d46\",\"trace_id\":\"016bf668-6712-4c0f-8c8c-c2e411a37889\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring start {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:19] local.NOTICE: Monitoring end {\"correlation_id\":\"4c2d4775-716d-4ca6-b94d-cb17dace29a7\",\"trace_id\":\"e969e10d-e5f0-44c6-9767-97a70e05cfe5\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d03e9546-bfd0-44c6-84ee-299b1e6c14a2\",\"trace_id\":\"acbab6e5-17fc-4b11-907d-ff87322285d7\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2c0095a-18b2-427e-825b-c68c9dbf63a1\",\"trace_id\":\"9b170d6a-ed10-4a41-af79-684c99021967\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4e70056-ceab-4c44-874a-8042963ce3ea\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:57:28] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"c296bf83-9f7c-4228-b6f5-99db6040fa01\",\"trace_id\":\"011a70aa-ebb2-4ca8-aef6-4b4cca233da7\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:06] local.ERROR: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n {\"exception\":\"[object] (SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24)\n[stacktrace]\n#0 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(125): SevenShores\\\\Hubspot\\\\Exceptions\\\\HubspotException::create(Object(GuzzleHttp\\\\Exception\\\\ClientException))\n#1 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#2 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#3 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#4 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#5 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#6 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#7 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#14 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#16 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#17 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#18 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#21 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#22 {main}\n\n[previous exception] [object] (GuzzleHttp\\\\Exception\\\\ClientException(code: 429): Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e0284-5 (truncated...)\n at /home/jiminny/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:111)\n[stacktrace]\n#0 /home/jiminny/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\\\Exception\\\\RequestException::create(Object(GuzzleHttp\\\\Psr7\\\\Request), Object(GuzzleHttp\\\\Psr7\\\\Response), NULL, Array, NULL)\n#1 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\\\Middleware::GuzzleHttp\\\\{closure}(Object(GuzzleHttp\\\\Psr7\\\\Response))\n#2 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\\\Promise\\\\Promise::callHandler(1, Object(GuzzleHttp\\\\Psr7\\\\Response), NULL)\n#3 /home/jiminny/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\\\Promise\\\\Promise::GuzzleHttp\\\\Promise\\\\{closure}()\n#4 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\\\Promise\\\\TaskQueue->run(true)\n#5 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitFn()\n#6 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#7 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\\\Promise\\\\Promise->invokeWaitList()\n#8 /home/jiminny/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\\\Promise\\\\Promise->waitIfPending()\n#9 /home/jiminny/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\\\Promise\\\\Promise->wait()\n#10 /home/jiminny/vendor/hubspot/hubspot-php/src/Http/Client.php(113): GuzzleHttp\\\\Client->request('POST', 'https://api.hub...', Array)\n#11 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(163): SevenShores\\\\Hubspot\\\\Http\\\\Client->request('POST', 'https://api.hub...', Array)\n#12 /home/jiminny/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php(51): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->executeSearchRequest(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), 'https://api.hub...', Array, Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\PaginationState))\n#13 /home/jiminny/app/Services/Crm/Hubspot/Client.php(194): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Pagination\\\\HubspotPaginationService->getPaginatedDataGenerator(Object(Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client), Array, 'contact', 0, 0, NULL)\n#14 /home/jiminny/app/Services/Crm/Hubspot/Client.php(175): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedDataGenerator(Array, 'contact', 0, 0, NULL)\n#15 /home/jiminny/app/Services/Crm/Hubspot/Service.php(1203): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Client->getPaginatedData(Array, 'contact')\n#16 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(353): Jiminny\\\\Services\\\\Crm\\\\Hubspot\\\\Service->matchByName('Robot')\n#17 /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php(44): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->rateLimit()\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand->handle(Object(Jiminny\\\\Jobs\\\\JobDispatcher), Object(Jiminny\\\\Services\\\\Kiosk\\\\AutomatedReports\\\\AutomatedReportsService), Object(Jiminny\\\\Repositories\\\\AutomatedReportsRepository), Object(Jiminny\\\\Services\\\\UserPilot\\\\UserPilotClient))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\\\\Container\\\\Container->call(Array)\n#24 /home/jiminny/vendor/symfony/console/Command/Command.php(341): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#26 /home/jiminny/vendor/symfony/console/Application.php(1117): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#27 /home/jiminny/vendor/symfony/console/Application.php(356): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Jiminny\\\\Console\\\\Commands\\\\JiminnyDebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#28 /home/jiminny/vendor/symfony/console/Application.php(195): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#31 /home/jiminny/artisan(13): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#32 {main}\n\"} {\"correlation_id\":\"a9e2de8b-b538-437e-bbe7-82636da81995\",\"trace_id\":\"e517ae80-e149-490c-b719-309e898b3c93\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fb59e309-d2cc-4fe0-9db2-544112c25477\",\"trace_id\":\"28ccdd4f-bf3a-4545-bc8a-d94188f8204f\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bff14f9f-db1d-4b6c-bd92-ca810b31790a\",\"trace_id\":\"ed08145b-94b8-4585-8e81-0ad478d038dc\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring start {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:16] local.NOTICE: Monitoring end {\"correlation_id\":\"54ed6493-c74e-4491-b2ff-9404528f1525\",\"trace_id\":\"9a1f78c0-6e74-482c-a091-8367df3d0f70\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f141a32-060d-4123-bf20-8a8d7abc1482\",\"trace_id\":\"f7fdcb6b-932a-4f6b-ad95-f111628d6cf7\"}\n[2026-05-07 12:58:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:36] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f586fc15-711b-4199-8fdf-dcd2df95af0c\",\"trace_id\":\"828fb459-3b7f-4196-a690-12fc9ce99b1d\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:56:00, 2026-05-07 12:58:00] {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:40] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"01d4e25d-56d5-4c89-bc29-d873e21cc16f\",\"trace_id\":\"ee1fe1ac-362b-47c1-9db2-7915a30cf0f2\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.NOTICE: Calendar sync start {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"924e149e-3462-4043-87da-00838220b970\",\"trace_id\":\"7d0922db-8131-4a52-a0c5-2a7a78df42e8\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:49] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:51] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: ef9bb388-453e-4744-a2e1-95e49ced1700 Correlation ID: 3b889c73-f943-4048-ba3b-63ac50581245 Timestamp: 2026-05-07 12:58:53Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:53Z\\\",\\\"trace_id\\\":\\\"ef9bb388-453e-4744-a2e1-95e49ced1700\\\",\\\"correlation_id\\\":\\\"3b889c73-f943-4048-ba3b-63ac50581245\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:53] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0b8181c0-c858-4d17-af69-c23b7f5a0a00 Correlation ID: 2ce9e931-f423-4048-b1d7-ae1910cd4834 Timestamp: 2026-05-07 12:58:54Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:54Z\\\",\\\"trace_id\\\":\\\"0b8181c0-c858-4d17-af69-c23b7f5a0a00\\\",\\\"correlation_id\\\":\\\"2ce9e931-f423-4048-b1d7-ae1910cd4834\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:54] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:55] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 4f38b1ca-479e-445c-8db5-29366d0a0c00 Correlation ID: d0a4d623-1a23-4fcc-aebf-ccafeed44a92 Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"4f38b1ca-479e-445c-8db5-29366d0a0c00\\\",\\\"correlation_id\\\":\\\"d0a4d623-1a23-4fcc-aebf-ccafeed44a92\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1791a948-a974-424b-9246-7fedfa913b00 Correlation ID: b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec Timestamp: 2026-05-07 12:58:56Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:56Z\\\",\\\"trace_id\\\":\\\"1791a948-a974-424b-9246-7fedfa913b00\\\",\\\"correlation_id\\\":\\\"b0e7bf62-d69e-49dd-b7c9-9550f0bd2aec\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:56] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"415d01eb-54ca-4663-adfe-384b7045952d\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be27598-8820-475c-b6ca-a30513720c00 Correlation ID: d3ed2a98-4aa9-4a63-819b-d36fd20b8d62 Timestamp: 2026-05-07 12:58:57Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 12:58:57Z\\\",\\\"trace_id\\\":\\\"2be27598-8820-475c-b6ca-a30513720c00\\\",\\\"correlation_id\\\":\\\"d3ed2a98-4aa9-4a63-819b-d36fd20b8d62\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:57] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:58] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"54027c3b-4bdf-435b-9414-9b8b7cd9633f\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"bd5351f8-4f39-4199-98f5-aa39a1b90962\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:58:59] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b382839b-ba3d-4d03-ab01-70b4f861ddc1\",\"trace_id\":\"9fcbd6a2-9d29-44c4-ba3f-4f06ce898d62\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cb5f9d32-02db-4883-a5c9-a5b86c1a2fbb\",\"trace_id\":\"4fb8a9a0-53b1-414a-813d-a259b89f3203\"}\n[2026-05-07 12:59:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64313a2b-3a92-4419-ae59-caabfc9e9731\",\"trace_id\":\"16443bac-2196-4257-88bc-59445729f276\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring start {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:11] local.NOTICE: Monitoring end {\"correlation_id\":\"7678c2ca-049f-44e4-acce-2e711f8d7d40\",\"trace_id\":\"54ef3d3c-f1ea-4a01-aed2-db19a6739a06\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"44d7c1a1-dfc9-4401-9f63-ad8b5bff9942\",\"trace_id\":\"9f6f5f38-60f5-4869-bfd2-f366d52eaa00\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 12:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f90f3b8c-5161-4963-a963-a40284567af1\",\"trace_id\":\"94731c50-8ce2-44ec-ace6-2d46fb00fdb1\"}\n[2026-05-07 13:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6f98d5e3-0aa8-496e-853a-a77b7a8b74ec\",\"trace_id\":\"b63e8546-4347-49f0-ad1a-92f4e4504843\"}\n[2026-05-07 13:00:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"50260ccd-f119-47b0-baee-514de27801f2\",\"trace_id\":\"40e651df-62f6-4c3a-83ab-842112ec3ece\"}\n[2026-05-07 13:00:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"50260ccd-f119-47b0-baee-514de27801f2\",\"trace_id\":\"40e651df-62f6-4c3a-83ab-842112ec3ece\"}\n[2026-05-07 13:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"f6104856-aca3-4e7b-964e-bba66d730eb3\",\"trace_id\":\"98f34b7b-f715-49cb-8d3a-4e74c1118445\"}\n[2026-05-07 13:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"f6104856-aca3-4e7b-964e-bba66d730eb3\",\"trace_id\":\"98f34b7b-f715-49cb-8d3a-4e74c1118445\"}\n[2026-05-07 13:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b4a9e9a2-968c-429b-8fa8-67dd59bb297f\",\"trace_id\":\"ed6a83d0-8edb-4392-8717-26d91ffde80b\"}\n[2026-05-07 13:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b4a9e9a2-968c-429b-8fa8-67dd59bb297f\",\"trace_id\":\"ed6a83d0-8edb-4392-8717-26d91ffde80b\"}\n[2026-05-07 13:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b11474b2-8b19-4a2f-89c3-621fde9d3b1f\",\"trace_id\":\"8018d825-0809-411b-9b2a-078e2da6bacb\"}\n[2026-05-07 13:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:58:00, 2026-05-07 13:00:00] {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:58:00, 2026-05-07 13:00:00] {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d3b79f58-f9c8-4063-ac7e-7a0445cd1111\",\"trace_id\":\"802cf505-95fb-4f92-8c1b-79aa3ac53084\"}\n[2026-05-07 13:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"32bad9c1-861c-4a46-bece-585cc1170bfd\",\"trace_id\":\"0c20e20f-6a91-4346-9455-5cd1451c32a1\"}\n[2026-05-07 13:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"32bad9c1-861c-4a46-bece-585cc1170bfd\",\"trace_id\":\"0c20e20f-6a91-4346-9455-5cd1451c32a1\"}\n[2026-05-07 13:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c9d4f687-1643-431e-9377-2573a2e593fd\",\"trace_id\":\"02fab433-9c9a-49f7-b836-2b8a42551912\"}\n[2026-05-07 13:00:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c9d4f687-1643-431e-9377-2573a2e593fd\",\"trace_id\":\"02fab433-9c9a-49f7-b836-2b8a42551912\"}\n[2026-05-07 13:00:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:33] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57870bb4-45e8-47d8-b192-21d3297d2208\",\"trace_id\":\"ba8e9eac-2dc9-4ed8-bbf1-4a35aedb9efb\"}\n[2026-05-07 13:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:50:00, 2026-05-07 12:55:00] {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:55:00] {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6aeb181b-8314-4d45-aff7-e378793b04d9\",\"trace_id\":\"8ffc66f1-af64-4a58-8ce8-481b3a299dbb\"}\n[2026-05-07 13:00:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:55\",\"to\":\"13:00\"} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:50\",\"to\":\"02:55\"} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"888d4f67-ad14-4457-b51d-2cf8b2d315f9\",\"trace_id\":\"eaf4b0b3-0414-4563-b227-ce9c6a2e5b7e\"}\n[2026-05-07 13:00:39] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:40] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"c7b4a8f4-7f10-401b-8d76-be978e462783\",\"trace_id\":\"42a77369-3041-4c40-ba73-331193e6c43e\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b619cc55-b4ef-4913-ab44-6bce51933f7e\",\"trace_id\":\"7cacb418-6e9c-410b-bf3a-15bdf1837908\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a765990f-ffe2-44e0-967f-816f5452ce69\",\"trace_id\":\"9aee0f3f-7668-455f-b207-181b58848478\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b619cc55-b4ef-4913-ab44-6bce51933f7e\",\"trace_id\":\"7cacb418-6e9c-410b-bf3a-15bdf1837908\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T13:02:45.724437Z\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a765990f-ffe2-44e0-967f-816f5452ce69\",\"trace_id\":\"9aee0f3f-7668-455f-b207-181b58848478\"}\n[2026-05-07 13:00:45] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"055b4798-a759-4621-9e0b-652f8ee69ea1\",\"trace_id\":\"10911ef4-48d1-404a-9345-ecf0f5cb9977\"}\n[2026-05-07 13:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"055b4798-a759-4621-9e0b-652f8ee69ea1\",\"trace_id\":\"10911ef4-48d1-404a-9345-ecf0f5cb9977\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:51] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812331,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812332,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812333,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812334,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812335,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Dispatching activity sync job {\"import_id\":812336,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd8cdea2-20f7-42a7-a492-f85b6037fbec\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.ALERT: [SyncActivity] Failed {\"import_id\":812331,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Social account for Salesforce cannot be found. Please login to Jiminny to connect.\",\"file\":\"/home/jiminny/app/Services/Crm/BaseService.php\",\"line\":646} {\"correlation_id\":\"fb068e24-e135-4914-9973-94f1a0f5dae2\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:00:56] local.ALERT: [SyncActivity] Failed {\"import_id\":812332,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"fe9470d4-bc5a-4195-919d-e4908e439f7c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"441dabbc-0c1f-4d49-871c-08f96adbed01\",\"trace_id\":\"13597461-50ff-4a40-a329-255430126395\"}\n[2026-05-07 13:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"441dabbc-0c1f-4d49-871c-08f96adbed01\",\"trace_id\":\"13597461-50ff-4a40-a329-255430126395\"}\n[2026-05-07 13:00:57] local.ALERT: [SyncActivity] Failed {\"import_id\":812333,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"e3a8ef92-20c7-4698-a07d-1aa2c21ac82c\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.ALERT: [SyncActivity] Failed {\"import_id\":812334,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"1a0b64ee-3927-48e6-8ae3-fda14f35babb\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.ALERT: [SyncActivity] Failed {\"import_id\":812335,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"Activity Provider account not connected.\",\"file\":\"/home/jiminny/app/Services/Activity/ActivityProviderService.php\",\"line\":174} {\"correlation_id\":\"5e6fecb1-9905-4ab2-a494-e6d8215430c0\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] Start {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:44:00\",\"to\":\"2026-05-07 13:00:00\"} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] End {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:58] local.INFO: [SyncActivity] Memory usage {\"import_id\":812336,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27230632,\"memory_real_usage\":67108864,\"pid\":37116} {\"correlation_id\":\"f6b9723f-8cbd-4ddc-8b89-9a346abe1f64\",\"trace_id\":\"2fa600c9-120a-4c94-82da-0530a90fc96c\"}\n[2026-05-07 13:00:59] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1db560c5-5d8c-419a-bfb0-e761473ecf44\",\"trace_id\":\"79eb494e-fd21-4171-b59d-d7d47358f1fb\"}\n[2026-05-07 13:00:59] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1db560c5-5d8c-419a-bfb0-e761473ecf44\",\"trace_id\":\"79eb494e-fd21-4171-b59d-d7d47358f1fb\"}\n[2026-05-07 13:01:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"73c0e9d6-7ef5-4040-8e35-0a9bb4028abf\",\"trace_id\":\"55b51c26-06b9-4b59-b444-53017b805b30\"}\n[2026-05-07 13:01:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"73c0e9d6-7ef5-4040-8e35-0a9bb4028abf\",\"trace_id\":\"55b51c26-06b9-4b59-b444-53017b805b30\"}\n[2026-05-07 13:01:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5a7e717c-f314-4601-b1b8-fd550703f463\",\"trace_id\":\"a64281e5-027f-4856-a3e3-4f176c58eb6e\"}\n[2026-05-07 13:01:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5a7e717c-f314-4601-b1b8-fd550703f463\",\"trace_id\":\"a64281e5-027f-4856-a3e3-4f176c58eb6e\"}\n[2026-05-07 13:01:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0c425954-2696-4890-97b7-219ccc38cf46\",\"trace_id\":\"d609b364-f3b6-4b85-babb-67caf96efdb1\"}\n[2026-05-07 13:01:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0c425954-2696-4890-97b7-219ccc38cf46\",\"trace_id\":\"d609b364-f3b6-4b85-babb-67caf96efdb1\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:11] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"5a8651dd-d434-467b-931e-1eda429d2b65\",\"trace_id\":\"4c1d2061-cc57-4b72-996d-389270f3539c\"}\n[2026-05-07 13:01:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6bad97b-3db2-4dd6-839f-fcd485f06e65\",\"trace_id\":\"dcdde4a9-962c-46d1-9386-42adb54efbbf\"}\n[2026-05-07 13:01:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6bad97b-3db2-4dd6-839f-fcd485f06e65\",\"trace_id\":\"dcdde4a9-962c-46d1-9386-42adb54efbbf\"}\n[2026-05-07 13:01:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2893478e-8c43-4719-a2e8-7c9c0e0783e9\",\"trace_id\":\"3fc8f1f0-0727-42f1-8ee6-f2b32bd8834b\"}\n[2026-05-07 13:01:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2893478e-8c43-4719-a2e8-7c9c0e0783e9\",\"trace_id\":\"3fc8f1f0-0727-42f1-8ee6-f2b32bd8834b\"}\n[2026-05-07 13:01:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:17] local.INFO: Dispatching activity sync job {\"import_id\":812337,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64f52ca1-b54e-46da-a760-73dbdf407eaf\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3c44e0a7-ec5d-4206-a925-69f6e0783c2a\",\"trace_id\":\"60cf7a36-37ca-4ac4-a632-f317578d908f\"}\n[2026-05-07 13:01:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3c44e0a7-ec5d-4206-a925-69f6e0783c2a\",\"trace_id\":\"60cf7a36-37ca-4ac4-a632-f317578d908f\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [SyncActivity] Start {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:19] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 12:00:00\",\"to\":\"2026-05-07 13:00:00\"} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:20] local.INFO: [SyncActivity] End {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:20] local.INFO: [SyncActivity] Memory usage {\"import_id\":812337,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27392888,\"memory_real_usage\":67108864,\"pid\":37116} {\"correlation_id\":\"c17440cb-9db0-403b-a1ad-a1c7e45b75b3\",\"trace_id\":\"2d0db8fa-83be-4207-bfb6-099456ac234e\"}\n[2026-05-07 13:01:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"55ebbc10-80bf-4724-ac64-678f6ef891cc\",\"trace_id\":\"f5392dc4-b352-4cae-b82a-004f77bbaf26\"}\n[2026-05-07 13:01:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"55ebbc10-80bf-4724-ac64-678f6ef891cc\",\"trace_id\":\"f5392dc4-b352-4cae-b82a-004f77bbaf26\"}\n[2026-05-07 13:01:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}\n[2026-05-07 13:01:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9e29cfb5-b7fc-41bc-a9fd-a160d2253806\",\"trace_id\":\"3e180d83-299d-4c6c-bdda-d5a8ac156efc\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.49335107,"top":0.17478053,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"18","depth":4,"bounds":{"left":0.50265956,"top":0.17478053,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n// if ($this->shouldStopPagination($state, $teamId)) {\n// break;\n// }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n// $this->validateTokenIfNeeded($client, $state);\n// usleep($delay);\n\n $page = $this->executeSearchRequest($client, $endpoint, $payload, $state);\n\n// $state->setTotal($page['total'] ?? 0);\n// $this->updateLastRecordId($page, $state);\n//\n// // Safely iterate over results with null check\n// $results = $page['results'] ?? [];\n// foreach ($results as $row) {\n// $state->incrementTotalRecords();\n// yield $row;\n// }\n//\n// $state->setOffset($this->getNextOffset($page));\n// $state->incrementRequestCount();\n//\n// $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $endpoint, array $payload, PaginationState $state): array\n {\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $response->toArray();\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n } else {\n throw $e;\n }\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","depth":4,"bounds":{"left":0.122340426,"top":0.17158818,"width":0.40591756,"height":0.8284118},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n// if ($this->shouldStopPagination($state, $teamId)) {\n// break;\n// }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n// $this->validateTokenIfNeeded($client, $state);\n// usleep($delay);\n\n $page = $this->executeSearchRequest($client, $endpoint, $payload, $state);\n\n// $state->setTotal($page['total'] ?? 0);\n// $this->updateLastRecordId($page, $state);\n//\n// // Safely iterate over results with null check\n// $results = $page['results'] ?? [];\n// foreach ($results as $row) {\n// $state->incrementTotalRecords();\n// yield $row;\n// }\n//\n// $state->setOffset($this->getNextOffset($page));\n// $state->incrementRequestCount();\n//\n// $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $endpoint, array $payload, PaginationState $state): array\n {\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $response = $client->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $response->toArray();\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n } else {\n throw $e;\n }\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3058524373122718549
|
6701901348364979261
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
933
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa8a3008-d298-4682-bbbc-fdc77520e0d7","trace_id":"7cfb2afb-9fc4-4a77-81be-65dce93c7d80"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"932ced9d-9804-48ed-976a-1f8bf5e75707","trace_id":"21bf320c-58f3-4082-831d-9f07f6c6a669"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:17] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.55,"average_seconds_per_request":0.55} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring start {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.51,"average_seconds_per_request":0.51} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:18] local.NOTICE: Monitoring end {"correlation_id":"ae3ec78f-432c-4e22-b73b-0413af73d9f3","trace_id":"c2feb517-0f2b-4ad9-bce5-4d57476a164b"}
[2026-05-07 12:52:18] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:19] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bf2f73f-007c-4909-925e-f1749fbf87b3","trace_id":"8429123c-d92c-48d9-a154-29bc0aa0e2a1"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:20] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.62,"average_seconds_per_request":0.62} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.78,"average_seconds_per_request":0.78} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:22] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":1.21,"average_seconds_per_request":1.21} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:23] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/contact/search","total_requests":1,"total_records_fetched":1,"total_elapsed_seconds":0.53,"average_seconds_per_request":0.53} {"correlation_id":"84c9b84a-9f60-4e35-956a-ead94112d174","trace_id":"07a542c8-266e-40e4-97ec-725d0fd3192d"}
[2026-05-07 12:52:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:25] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d1bc569d-b1ae-4ac5-b2cd-0bb8d765bbd8","trace_id":"64ccac6b-34f7-45ed-a8ac-b63adbb19107"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:50:00, 2026-05-07 12:52:00] {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6e1a36d0-a87a-455f-88b9-04f16718ea33","trace_id":"ce4c48f7-dbeb-4574-9f0a-1097a7c1dc6c"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"80549428-beea-4a6c-97d3-818ca0f059f3","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:32] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"92242bd6-7014-4487-a50b-1570e1a88e7a","trace_id":"55ddd59b-073b-4331-8cdb-baa869dcff70"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:52:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d467eace-3254-4ecc-8d8e-a94688d6d3ad","trace_id":"5105ca8f-3c0d-4798-b748-5a7d6fbd7531"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"04363b29-2f82-470a-89d0-c5ce4f4779d7","trace_id":"3c76a1f1-3348-4e2b-897c-4a216ca95147"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5ebbecd0-866c-443f-965f-b6ac03735379","trace_id":"e0a724a5-bb4b-4fe6-9fe9-36ea1c3f0326"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring start {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:18] local.NOTICE: Monitoring end {"correlation_id":"f39f0d3c-a292-41cb-8834-45dae1f8cf47","trace_id":"b6e7e2a7-85af-401d-afc6-bec2bdab34d7"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"419bb747-2669-496f-944b-1073496cc271","trace_id":"4cb913a4-ef75-422b-80eb-fbfb988521ed"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f4805c97-9344-4111-8be2-2b1efeae07bb","trace_id":"cf7ff1ad-3e3d-4a7a-a1a6-99a883cbfe22"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:53:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2eadb06b-2c2e-4a7f-8920-77bd30d6cd7f","trace_id":"75f27a23-2021-41a5-9e5f-4b1cb4f143a6"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ad151521-f676-4351-a70b-f44dc0b94990","trace_id":"17e39c4c-85cb-49a4-815e-b7315a8c2249"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ed0583cf-03c6-4696-b859-876c8efa4473","trace_id":"3f9e0a3c-2178-4885-95eb-8618b8cfc042"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring start {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:10] local.NOTICE: Monitoring end {"correlation_id":"7142250a-b897-4620-8ff7-fd9b3a1f3802","trace_id":"597def1e-ca38-4cc4-8890-fdcd5baff948"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cb2ada48-0200-4eb3-a8c5-6cb8ea43ec0d","trace_id":"73937bdc-10b9-4508-9ef2-86420fe774fc"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f1d8932-2839-4256-99ab-1fd13e8381c6","trace_id":"cc090767-edc2-4a89-90c2-116f1737de7f"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:52:00, 2026-05-07 12:54:00] {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9d324c6d-5b36-46ee-89c6-f95f86bf3f39","trace_id":"860cdff0-9356-4e94-84cc-e011a74ba56c"}
[2026-05-07 12:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c2009a88-eea6-4954-8642-ef5d9cb56b42","trace_id":"71a5ea6f-c8d8-45e2-8458-a2f572f5fcab"}
[2026-05-07 12:54:21] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"825ef2d7-b5f8-45cd-b19d-20a179b06934","trace_id":"5825a6c8-14c9-4bec-b688-d4895cfc41cc"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c0dc8e25-7a51-4023-be61-d0abd6d72e37","trace_id":"16b8fa3e-92b1-465e-82d4-642a2d14c7c5"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1c65fdd1-1f79-435d-b469-add46ddafd63","trace_id":"62f2a3bb-3be7-4c76-a9dd-222bfb895fab"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring start {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:11] local.NOTICE: Monitoring end {"correlation_id":"f115f9bc-bb59-4fc9-8c9f-8b69baba1a55","trace_id":"e75cb5c6-6dd8-4000-8d26-4418020c7cfe"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dba5c474-4d40-44da-baf2-f8b30db9a2f5","trace_id":"adb45622-1fb0-457c-bf20-8dcceab2d62a"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"22c96a8e-4424-4a1f-b349-206276eefe4c","trace_id":"1444d00b-35f8-4eba-b5e6-7c36c9cdeb4c"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5f958e8d-1d01-4144-abd6-2513e5524ad3","trace_id":"828bc5b7-e2aa-4443-901f-38dd94bb7cc5"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6bd1c9cb-cd9a-42a9-87fe-45cb7bac687a","trace_id":"0f2f5d66-c4c9-46a5-a31b-6937663ce1ad"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Running pre-meeting notification command {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c5dd8132-d7e1-4caa-84d1-0a50d02df8da","trace_id":"bc7341c5-b8e2-48ea-9670-7ec375363180"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 12:45:00, 2026-05-07 12:50:00] {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f44cba2d-7f2e-4fa9-9d6c-c5597fd0c3a0","trace_id":"efb1619f-4185-4319-9bfb-305cee0b6bfc"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:50","to":"12:55"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:45","to":"02:50"} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3792b31a-080a-4fe4-9823-5602361325ba","trace_id":"41a2fde1-48f6-4667-84b7-a2f93e9ad2da"}
[2026-05-07 12:55:30] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"e31362f8-5362-478d-911d-099b61f96cd2","trace_id":"2587b5d0-6bef-40a5-afd5-a15003b7cf95"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5e676ae4-5d63-49d4-9001-559088adf06b","trace_id":"2fcce073-dd68-4c99-b7c4-b9e03c20b8e4"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:57:40.609671Z"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:40] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f830896-8142-41d1-bfc9-4cbb9179ffda","trace_id":"e348a096-7f37-4308-a6d8-66131e8be901"}
[2026-05-07 12:55:40] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:45] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:46] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:55:51] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:06] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2d8b30b4-87aa-480f-9b9e-5a9c709b742a","trace_id":"25b7be6c-1faf-430b-a724-a4ff28773a31"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"efd336d7-db4d-459e-b6e7-bf73454e955e","trace_id":"0a82c3d5-0417-48c8-b88f-70ec33e2326a"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring start {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:12] local.NOTICE: Monitoring end {"correlation_id":"68481576-8ca6-4ee5-821b-07374702971d","trace_id":"c73eac09-5d20-425f-9c22-bd6c65fc60c9"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bd0cdc75-b5c2-4dbb-bc44-e36c96813d24","trace_id":"f688cd98-c171-4e30-8c72-afc14f040861"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f01636a9-4059-4ab0-9ad2-b078d42cedbd","trace_id":"fea938d8-aedc-40ec-b8c2-2f487e1ac808"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 12:54:00, 2026-05-07 12:56:00] {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d4558901-264d-4238-8589-62a137bac1fd","trace_id":"38e6b5dc-ebd6-46a7-8224-7374d4e58630"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7bfaf9be-0ca1-4170-a0c9-83e0ed61881c","trace_id":"ba7f9eee-8dcb-4c94-acb0-18f9363757ad"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:notify-not-logged","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2541e0fa-1117-4863-9523-d723b5821a24","trace_id":"d9600320-5133-4938-bdd1-2256dfdf8db4"}
[2026-05-07 12:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e444f776-37db-4c6d-b30e-20b01a089de7","trace_id":"1168869e-e07c-4702-a046-42fc95a91f6d"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":57,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":238.3,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3-04eb-4a0f-b056-eb64e9c75a80"}
[2026-05-07 12:56:37] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"fa65a15d-da5b-4c86-ae85-c16937786996","trace_id":"7e655fe3...
|
NULL
|
NULL
|
NULL
|
NULL
|